鱼C论坛

 找回密码
 立即注册
查看: 1521|回复: 10

正则判断2种随机出现的字段该怎么做?

[复制链接]
发表于 2022-2-16 10:39:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
比如一个字段  abcd='123'   我需要提取abcd=后面的字符串,但有时候网页会是ab_cd='123'

除了用if判断是否为空后再进行下一个正则以外,还有其他更好更简单的办法吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-2-16 10:51:19 | 显示全部楼层
不知道你想要实现的是不是这种效果
>>> import re
>>> partern = re.compile(r"ab.?cd=('\d+')")
>>> partern.search("abcd='123'").group(1)
"'123'"
>>> partern.search("ab_cd='123'").group(1)
"'123'"
>>>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-2-16 11:58:59 | 显示全部楼层
isdkz 发表于 2022-2-16 10:51
不知道你想要实现的是不是这种效果

你说的这个方法也是不错,但针对这个确实没问题,但如果是完全不同的支付串呢,比如
success和error后面的字段,因为出现频率都是随机的,这个该咋办呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-16 12:22:23 | 显示全部楼层
本帖最后由 isdkz 于 2022-2-16 12:23 编辑
cdzjf 发表于 2022-2-16 11:58
你说的这个方法也是不错,但针对这个确实没问题,但如果是完全不同的支付串呢,比如
success和error后面 ...


再怎么随机也肯定有共同特征呀,

正则表达式不就是用来给字符串归类的,

没有共同特征怎么用正则表达式?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-16 18:40:54 | 显示全部楼层
cdzjf 发表于 2022-2-16 11:58
你说的这个方法也是不错,但针对这个确实没问题,但如果是完全不同的支付串呢,比如
success和error后面 ...

其实你的问题根本上是如何总结你要提取的字符串出现位置的特征,最简单的办法,把自己判断的方法用代码实现出来~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-2-16 23:20:08 | 显示全部楼层
lightninng 发表于 2022-2-16 18:40
其实你的问题根本上是如何总结你要提取的字符串出现位置的特征,最简单的办法,把自己判断的方法用代码实 ...

那也就是要加if,就是想想看有什么不加if可以直接做的方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-17 11:54:15 | 显示全部楼层
本帖最后由 isdkz 于 2022-2-17 12:00 编辑
cdzjf 发表于 2022-2-16 23:20
那也就是要加if,就是想想看有什么不加if可以直接做的方法


字符串处理就没有正则不能做的,关键是你得知道你要处理的字符串的通性是什么

比如你后面说的那个:
>>> import re
>>> partern = re.compile(r".+=('.+')")
>>> partern.search("success='test0'").group(1)
"'test0'"
>>> partern.search("error='test1'").group(1)  
"'test1'"
>>>

可是你都没说清楚你的需求是什么真的没法写出你想要的正则
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-22 08:13:21 | 显示全部楼层
cdzjf 发表于 2022-2-16 23:20
那也就是要加if,就是想想看有什么不加if可以直接做的方法

不一定要用if,而且用不用if只是具体的技术问题,关键点在于特征是什么,特征有了,就像楼下这位说的,用正则也可以,而且你想表达的我觉得也不一定是说不用if把,在3.9之后的版本里,连续的if else语句可以用switch来代替,我想大概率也不是你想要的结果把~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-2-23 15:30:03 | 显示全部楼层
lightninng 发表于 2022-2-22 08:13
不一定要用if,而且用不用if只是具体的技术问题,关键点在于特征是什么,特征有了,就像楼下这位说的,用 ...

主要是有时候网页的很多类似的,比如
名字,姓名,姓氏等等
英文的
finish,complete,accomplish等等
这样就导致了在做正则的时候,你必须要考虑他网页已经出现过的字段,这就是麻烦点了
如果正则在做的时候可以来个 or 把上面这些可能出现的都写进去就好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-23 16:37:17 | 显示全部楼层
是否就像匹配邮箱一样,邮箱包括  @qq.com  @emaill.com @outlook.com  可以百度查询下关于邮箱的通用正则式借鉴
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-25 00:50:05 | 显示全部楼层
cdzjf 发表于 2022-2-23 15:30
主要是有时候网页的很多类似的,比如
名字,姓名,姓氏等等
英文的


既然你人能锚定要判断的字段的位置,那就可以用正则提取到这个位置的字符内容,比如现在有个内容就在#后面,可能出现的情况有三种,也就是#finish,#complete,#accomplish,那你就用正则把#后面的字符提取出来,然后判断它是否属于finish,complete,accomplish这三个其中的一种,代码可能是这样
result = re.compile(r"#([\s\S]*?)").search(string).group(1) #string就是你要在其中搜索你需要内容的源字符串
if result in ["finish","complete","accomplish"]:
    # 这里写查找到目标字符串的处理代码finish,complete,accomplish

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-6 08:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表