Python 符合以下要求的正则表达式
我正在尝试创建用于匹配的正则表达式: 我已经尝试了下面的正则表达式,但唯一的第一个条件是工作返回DS_。 DS_之后的任何其他内容都可以,但DS_TRUE不应匹配Python 符合以下要求的正则表达式,python,regex,Python,Regex,我正在尝试创建用于匹配的正则表达式: 我已经尝试了下面的正则表达式,但唯一的第一个条件是工作返回DS_。 DS_之后的任何其他内容都可以,但DS_TRUE不应匹配 Regex = (re.findall('(return DS_)|(return Status)&(^!return DS_TRUE)', Line)) ****Should Match**** Line = 'return DS_YES' Line = 'return DS_FALSE' Line = 'return
Regex = (re.findall('(return DS_)|(return Status)&(^!return DS_TRUE)', Line))
****Should Match****
Line = 'return DS_YES'
Line = 'return DS_FALSE'
Line = 'return DS_EVER'
Line = 'return Status'
****Should not match****
Line = 'return DS_TRUE'
您的模式(return DS|)(return Status)和(^!return DS|u TRUE)
包含3个捕获组
第一组匹配return DS
,第二组匹配return Status
,然后匹配一个与
第三组使用锚点^
断言字符串的开头,后跟匹配的!返回DS_TRUE
您可以在返回后使用一个负的前瞻来断言右边的内容不是DS_TRUE
\breturn (?!DS_TRUE).*
如果要从字符串的开头进行匹配,还可以使用锚点^
而不是单词边界\b
如果您只希望仅在它以DS\uu
开头时匹配,然后再匹配后面的所有内容或仅匹配状态,则可以使用:
\breturn (?!DS_TRUE)(?:DS_.*|Status)
单词边界,匹配返回,后跟空格(仅为清晰起见,标记为\b返回[]
)[]
负向前瞻,断言直接在右侧的内容不是DS\u TRUE(?!DS\u TRUE)
非捕获组(?:
Match DS_u,后跟匹配的0+字符,换行符除外DS_uu.*
或|
匹配状态状态
关闭非捕获组)
|使用
re.findall
Ex:
import re
Line = """ 'return DS_YES'
Line = 'return DS_FALSE'
Line = 'return DS_EVER'
Line = 'return Status'
Line = 'return DS_TRUE'
"""
r = re.findall('(return DS_(?!TRUE).*|return Status)', Line)
print(r)
["return DS_YES' ", "return DS_FALSE'", "return DS_EVER'", 'return Status']
输出:
import re
Line = """ 'return DS_YES'
Line = 'return DS_FALSE'
Line = 'return DS_EVER'
Line = 'return Status'
Line = 'return DS_TRUE'
"""
r = re.findall('(return DS_(?!TRUE).*|return Status)', Line)
print(r)
["return DS_YES' ", "return DS_FALSE'", "return DS_EVER'", 'return Status']
你在做什么?要检查一行是否不等于
return DS_TRUE
只需分成几行/逐行读取文件并检查if line!='返回DS_TRUE'
re.findall('(返回DS_(?!TRUE)。*|返回状态),第行)
?它应该只匹配以上四个,而不匹配其他四个。它与其他一切都匹配,然后才是真的。但它应该与开始的DS_u或返回状态匹配。@PRUTHVIBENPATEL在您的问题中指出:在DS_u之后的任何其他内容都可以,但DS_TRUE不应该匹配。