如何使用pythonre-findall和regex使两个条件可以同时运行?

如何使用pythonre-findall和regex使两个条件可以同时运行?,python,regex,Python,Regex,这里是我的数据字符串: MYDATA=DATANORMAL MYDATA=DATA_NOTNORMAL 我使用这段代码,但当我运行它时,它在DATANORMAL mydata = re.findall(r'MYDATA=(.*)' r'_.*', mystring) print mydata 它只是显示:NOTNORMAL mydata = re.findall(r'MYDATA=(.*)' r'_.*', mystring) print mydata 我希望两者都能工作,并显示如下数据:

这里是我的数据字符串:

MYDATA=DATANORMAL
MYDATA=DATA_NOTNORMAL
我使用这段代码,但当我运行它时,它在
DATANORMAL

mydata = re.findall(r'MYDATA=(.*)' r'_.*', mystring)
print mydata
它只是显示:
NOTNORMAL

mydata = re.findall(r'MYDATA=(.*)' r'_.*', mystring)
print mydata
我希望两者都能工作,并显示如下数据:

DATANORMAL
NOTNORMAL

我该怎么做?谢谢。

根据您的描述,您可能需要在此处使用替代选项:

\bMYDATA=((?:DATA|(?:DATA_))\S+)\b
脚本:

inp = "some text MYDATA=DATANORMAL more text MYDATA=DATA_NOTNORMAL"
mydata = re.findall(r'\bMYDATA=((?:DATA|(?:DATA_))\S+)\b', inp)
print(mydata)
这张照片是:

['DATANORMAL', 'DATA_NOTNORMAL']

我想您需要添加
flags=re.M

import re
mystring = """
MYDATA=DATANORMAL
MYDATA=DATA_NOTNORMAL"""

pattern = re.compile("MYDATA=(?:DATA_)?(\w+)",flags=re.M)
print(pattern.findall(mystring))


如果您需要在
之前而不是之后使用word,那么可以在上面的代码中使用regex
r'^\s*MYDATA=(.+?)(?:.+?\s*$”
,您正在使用的字符串与OP中的“字符串”有点不同?虽然我想这可能无关紧要,因为单词边界仍然会正确匹配起始位置。@cs95您的个人资料基本上是惊人的……在过去5年中加入的人很少有60多枚金牌。“你是怎么做到的?在过去的5年里,很少有人有和我一样多的职位,我认为这是我多年来参与的一个标志:”Tim Biegeleisen:是的,但是如果“MyDATA =”任意数据,这是不可能的,因为我的数据不是唯一的两个数据。请再次检查我的问题,我已经更新了详细信息。谢谢,但是如果
MYDATA=
是任意数据,那就不可能了,因为我的数据不是唯一的两个数据。请再次检查我的问题,我已经更新了详细信息。谢谢您是否只想从诸如
DATA\u NOTNORMAL
之类的词中删除
DATA\u前缀,或者还有其他前缀需要删除?如
INFO\u NOTNORMAL
是否需要删除
INFO\u
?您可能应该接受其中一个答案(或者发布您自己的答案并接受),然后发布一个新的问题以及更新后的要求。是的,这项工作可以完成,但与我想要的相反,您的脚本会在字符
\u
后显示数据,如果我想在字符
\uu
之前显示数据,@gmpsorg捕获
\u
之前的字符串,请在我的代码
r'^\s*MYDATA=(.+?)(?:。+)?\s*$”
中使用此正则表达式,您可以