Python正则表达式在遇到"&"时停止

1 投票
2 回答
2719 浏览
提问于 2025-04-18 09:26

我正在尝试写一个正则表达式,用来提取我在meta标签和&符号之间的所有文本。

在下面的例子中,我想提取键' My.Tag '的值,也就是'This-iswhatIwanttopull'。问题是我不知道怎么才能提取出&符号之前的所有内容。

$ import re
$ line = 'sometextsometext&My.Tag=This-iswhatIwanttopull&sometextsometext'
$ my_text = re.search('(?<=My\.Tag=)\w+',line)
$ print my_text.group()
$ This

2 个回答

2

问题是 \w 这个表达式不能匹配到连字符(-),所以你需要把它放进一个字符类里。

my_text = re.search(r'(?<=My\.Tag=)[\w-]+', line)

另一种选择是使用一个否定的 [^ ] 字符类,这意味着可以匹配任何字符,除了:&

my_text = re.search(r'(?<=My\.Tag=)[^&]+', line)

注意:使用 r 是Python中表示原始字符串的方式,这样可以避免转义字符的问题。

1

你可以使用一种正则表达式,它可以匹配任何除了“&”符号的内容:

$ my_text = re.search('(?<=My\.Tag=)[^&?]*', line)

这个正则表达式 [^&]* 可以匹配零个或多个不是“&”符号的字符。

撰写回答