正则表达中的主播

时间:2011-05-25 15:53:53

标签: python regex

  1. 在Python Regex中,必须是^或$ 只出现一次?
  2. 我尝试用

    匹配两行
    ^(.*\|.*)$^.*$
    

    它不起作用。你怎么配对 几行?

  3. 注意:我不是用Python编程,而是在我的编辑器gedit中使用Python风格的Regex。

    谢谢和问候!

6 个答案:

答案 0 :(得分: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>

您需要一些内容来匹配$^之间的行尾字符。

答案 1 :(得分:2)

看看re.MULTILINE

我引用:

  

指定时,模式字符   '^'匹配在开头   字符串和每个开头   线(紧随其后)   新队);和模式字符   '$'匹配字符串的末尾   并在每一行的末尾   (紧接在每个换行符之前)。

     

默认情况下,'^'仅匹配   字符串的开头,仅'$'   在字符串的末尾和   紧接在换行符之前(如果   任何)在字符串的末尾。

答案 2 :(得分:2)

你必须使用re.MULTILINE(如果你改变正则表达式,你可以使用re.DOTALL,具体取决于你想要匹配/做什么)

  

re.MULTILINE

     

指定时,模式字符   '^'在开头匹配   字符串和开头的   每一行(紧随其后)   新队);和模式字符   '$'匹配字符串的末尾   并在每一行的末尾   (紧接在每个换行符之前)。

     

默认情况下,'^'仅匹配   字符串的开头,只有'$'   在字符串的末尾和   紧接在换行符之前(如果   任何)在字符串的末尾。

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

顺便说一句,你在做什么 - ^(.*\|.*)$^.*$ - 这不是一个非常好的正则表达式! (忽略了你有多个$^这个问题的事实。)

答案 3 :(得分:2)

添加其他答案。您可以将re.MULTILINE修饰符直接放入正则表达式:

(?m)^(.*\|.*)$\n^.*$

答案 4 :(得分:1)

我会参考python正则表达式手册http://docs.python.org/library/re.html#re.MULTILINE

答案 5 :(得分:1)

使用(?m)对正则表达式进行前缀应该能够满足要求(告诉正则表达式引擎它将接收多行文本,并且^ / $匹配行的开头/结尾而不是整个文本)。 / p>

编辑:在看了你的正则表达式之后,我认为你还需要放(?s),这意味着你想要点匹配换行符。例如:

(?m)(?s)^hello.*?world$
在这样的情况下,

正确匹配“helloworld”:

dssdf
hello
world
sdfasdf