Python 符合以下要求的正则表达式

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

我正在尝试创建用于匹配的正则表达式:

我已经尝试了下面的正则表达式,但唯一的第一个条件是工作返回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 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
  • (?:
    非捕获组
    • DS_uu.*
      Match DS_u,后跟匹配的0+字符,换行符除外
    • |
    • 状态
      匹配状态
  • 关闭非捕获组

|

使用
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不应该匹配。