Python中的正则表达式翻译

0 投票
2 回答
625 浏览
提问于 2025-04-18 05:09

我刚开始学习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个或多个字符(*),这些字符在这个类中是([^>])。以插入符号(^)开头的字符类([])表示匹配不属于这个类的字符。在这个例子中,这个类只包含一个字符,即右尖括号(>)。
  • ) - 结束这个分组
  • > - 匹配右尖括号

撰写回答