Python中的正则表达式翻译
我刚开始学习Python中的正则表达式,但有些语法让我有点困惑。
我想知道如何把下面的正则表达式转换成可以在Python的re模块中使用的格式。
a(b|c)*a
符号是什么并不重要,我更想了解括号和操作符是怎么工作的。
如果我具体说一下我的情况,我想抓取两个尖括号之间的所有文本。根据我读的一些资料,“.”这个字符可以匹配除了换行符以外的任何字符,而“s”可以匹配任何空白字符,包括换行符,所以我认为可以这样做:
<[.|s]*>
但显然我错了。
我对我具体问题的解决方案很感兴趣,但如果能提供一些关于Python正则表达式中操作符的一般信息,我也会很感激。
编辑:
经过更多的实验,似乎当我使用以下内容时,它是有效的:
<.*>
当我有这样的文本时
<foo bar>
但当我有这样的文本时却不行
<foo
bar>
然而,当我尝试以下内容时
<[\n.]*>
什么都不管用。所以我想可能是括号的问题,于是我尝试了:
<[.]*>
但这甚至没有像<.*>
那样有效……但这两者除了括号外不应该是一样的吗?
有人有什么想法吗?我希望能抓取所有像这样的文本:
<foo
bar>
2 个回答
0
这个 a(b|c)*a
可以直接在 Python 的正则表达式中使用。可是 <[.|s]*>
就有点乱了。这里的 [
...]
是用来表示字符范围的,而 |
在里面是没用的。还有,s
在 Python 的正则表达式中并不代表空格,实际上是 \s
代表空格。你可能把 |s
和 \s
搞混了(不过在这里用 \n
更合适,或者使用相关的标志让 .
也能匹配换行符)。
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',)
要理解这个正则表达式,我们可以把它拆分成几个部分:
- < - 匹配左尖括号
- ( - 开始一个分组
- [^>]* - 匹配0个或多个字符(*),这些字符在这个类中是([^>])。以插入符号(^)开头的字符类([])表示匹配不属于这个类的字符。在这个例子中,这个类只包含一个字符,即右尖括号(>)。
- ) - 结束这个分组
- > - 匹配右尖括号