正则表达式中的锚点

1 投票
6 回答
3571 浏览
提问于 2025-04-16 18:19
  1. 在Python的正则表达式中,^或$必须只出现一次吗?
  2. 我尝试用下面的代码匹配两行:

    ^(.*\|.*)$^.*$
    

    但是没有成功。要怎么才能匹配多行呢?

注意:我并不是在用Python编程,而是在我的编辑器gedit中使用Python风格的正则表达式。

谢谢,祝好!

6 个回答

2

看看这个 re.MULTILINE

我来引用一下:

当你使用这个选项时,字符 '^' 会匹配字符串的开头,以及每一行的开头(也就是每次换行后紧接着的地方);而字符 '$' 会匹配字符串的结尾,以及每一行的结尾(也就是每次换行前的地方)。

默认情况下,'^' 只会匹配字符串的开头,而 '$' 只会匹配字符串的结尾,以及字符串结尾前的换行符(如果有的话)。

3

你需要使用 re.MULTILINE(如果你改变正则表达式,可能还需要 re.DOTALL,这取决于你想匹配什么或者想做什么)。

re.MULTILINE

当你使用这个选项时,模式字符 '^' 会匹配字符串的开头 以及每一行的开头(紧接在每个换行符后面);而模式字符 '$' 会匹配字符串的结尾 和每一行的结尾 (紧接在每个换行符前面)。

默认情况下,'^' 只会匹配字符串的开头,'$' 只会匹配字符串的结尾 和字符串结尾前的换行符(如果有的话)。

http://docs.python.org/library/re.html

顺便问一下,你在用 - ^(.*\|.*)$^.*$ - 这个正则表达式做什么呢?这不是一个很好的正则表达式!(忽略你有多个 $^ 的事实,这正是问题的关键所在。)

6

正如其他回答所说,你需要使用 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>

你需要一些东西来匹配 $^ 之间的行结束符。

撰写回答