python翻译中的正则表达式

时间:2014-05-02 16:16:07

标签: python regex

我只是想了解一下regex在python中是如何工作的,但是有些语法让我有点不知所措。

如何将以下正则表达式转换为可以由python中的re模块使用的正则表达式?

a(b|c)*a

符号是什么并不重要,我更多地询问括号和运算符,它们是如何工作的。

如果我要具体说明我的情况,我试图捕捉两个尖括号之间的所有文本。根据我读过的一些资源,“。”字符匹配除换行符之外的任何字符,“s”匹配任何空格,包括换行符,所以我认为这样做的方法是:

<[.|s]*>

但显然我错了。

我对我的具体问题的解决方案感兴趣,但是对于python正则表达式中的运算符的任何一般信息也将受到赞赏。

修改

经过更多的实验后,它似乎在我使用时起作用:

<.*>

当我有像

这样的文字时
<foo bar>

但不是我什么时候

<foo
bar>

然而,当我尝试

<[\n.]*>
没什么作用。所以我认为这可能是括号做的事情或其他事情,所以我尝试过:

<[.]*>

并且它甚至不像<.*>那样工作..但当然,除了括号之外,两者是相同的。

谁有任何想法?我希望能够捕获所有文本:

<foo
bar>

2 个答案:

答案 0 :(得分:3)

这里清楚地记录了python正则表达式语法:

https://docs.python.org/2/library/re.html

对于您的具体情况,我会尝试类似:

import re
pat = re.compile('<([^>]*)>')
match = pat.search('Foo <bar> bam')
print match.groups()
# should print ('bar',)

要理解正则表达式,我们可以将其分解为组成部分:

  • &LT; - 匹配左尖括号
  • ( - 小组的开始
  • [^>] * - 在类([^&gt;])中匹配0个或多个字符(*)。字符类([]) 以插入符号开头(^)表示匹配不属于的字符 班上的。在这种情况下,该类由单个组成 字符,直角括号(&gt;)。
  • ) - 结束小组
  • &GT; - 匹配直角括号

答案 1 :(得分:0)

a(b|c)*a可直接用作Python re。 <[.|s]*>是混乱的混乱。 [ ... ]是一个字符范围:|内部没有业务。 s不表示Python正则表达式中的空格;相反\s。也许你在这里|s\s混淆(但在这里使用\n和/或使用相应的标志使.也与换行符匹配会更有意义)。