正则表达式中的锚点
- 在Python的正则表达式中,^或$必须只出现一次吗?
我尝试用下面的代码匹配两行:
^(.*\|.*)$^.*$
但是没有成功。要怎么才能匹配多行呢?
注意:我并不是在用Python编程,而是在我的编辑器gedit中使用Python风格的正则表达式。
谢谢,祝好!
6 个回答
看看这个 re.MULTILINE
。
我来引用一下:
当你使用这个选项时,字符
'^'
会匹配字符串的开头,以及每一行的开头(也就是每次换行后紧接着的地方);而字符'$'
会匹配字符串的结尾,以及每一行的结尾(也就是每次换行前的地方)。默认情况下,
'^'
只会匹配字符串的开头,而'$'
只会匹配字符串的结尾,以及字符串结尾前的换行符(如果有的话)。
你需要使用 re.MULTILINE(如果你改变正则表达式,可能还需要 re.DOTALL,这取决于你想匹配什么或者想做什么)。
re.MULTILINE
当你使用这个选项时,模式字符 '^' 会匹配字符串的开头 以及每一行的开头(紧接在每个换行符后面);而模式字符 '$' 会匹配字符串的结尾 和每一行的结尾 (紧接在每个换行符前面)。
默认情况下,'^' 只会匹配字符串的开头,'$' 只会匹配字符串的结尾 和字符串结尾前的换行符(如果有的话)。
http://docs.python.org/library/re.html
顺便问一下,你在用 - ^(.*\|.*)$^.*$
- 这个正则表达式做什么呢?这不是一个很好的正则表达式!(忽略你有多个 $
和 ^
的事实,这正是问题的关键所在。)
正如其他回答所说,你需要使用 re.MULTILINE
,但即使这样,你的正则表达式也不会正常工作。
$
是用来匹配换行符 之前 的位置,而 ^
是用来匹配行的开头,所以在正则表达式中间的 $^
永远不会匹配到。例如:
>>> re.search("^(.*)$^.*$", multiline_string, re.M) # won't match
>>> re.search("^(.*)$\n^.*$", multiline_string, re.M) # will match
<_sre.SRE_Match object at 0xb7f3e5e0>
你需要一些东西来匹配 $
和 ^
之间的行结束符。