Python正则表达式不匹配行开头。

3

我有一个文本文件,里面包含一些数据:

... 
DATA_ARRAY Some[] =
{
...
};

我有一个Python 2.7的正则表达式,如下:

regx = re.compile("^DATA_ARRAY Some\[\].*?};", re.DOTALL)
regmatch = re.search(regx, data)
print regmatch.group(0)

问题在于正则表达式没有匹配到任何内容(regmatch为None)。如果我去掉^,那么它就可以很好地匹配了。
这里我做错了什么?我想添加以行开头的搜索符号。
3个回答

5
修饰符^强制正则表达式引擎从字符串的开头匹配正则表达式。由于您的字符串没有以DATA_ARRAY开头,因此返回None
如@nanny所提到的,如果您还想匹配每行的开头,请使用re.MULTILINE标志:
regx = re.compile("^DATA_ARRAY Some\[\].*?};", re.DOTALL|re.MULTILINE)

确实。如果你也想使它与每行的开头匹配,可以使用re.MULTILINE:https://docs.python.org/3/library/re.html#re.MULTILINE - nanny
1
这个答案是正确的,^匹配字符串的开头,或者在设置了re.MULTILINE的情况下匹配行的开头。因此,根据DATA_ARRAY是否总是在字符串的新行开头,您需要从模式中去掉插入符号或添加re.MULTILINE参数。 - Freek Wiekmeijer

2

^ 用于查找字符串的开头。添加 re.MULTILINE 标志。

regx = re.compile("^DATA_ARRAY Some\[\].*?};", re.MULTILINE|re.DOTALL)

1
如果您添加一个re.MULTILINE标志,它应该可以工作。
这将使标志看起来像re.MULTILINE|re.DOTALL

我实际上尝试将re.DOTALL更改为re.MULTILINE,但它仍然表现出相同的方式。 - ele lont
你需要将它们结合起来,因为你需要点号与其他换行符匹配。Python re.DOTALL文档 - Songy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接