python - 构建正则表达式以匹配 Python 中多个匹配项中的第一个匹配项

标签 python regex

假设我有以下文本:

*<string1>*<string2>*<string3>*

哪里*表示除 <> 包围的内容之外的任何文本.

我希望能够捕获 string1 (第一次出现由字符 <> 包裹的文本)。

我尝试过使用:

r = re.compile('.*<(.*?)>.*(<.*?>)*.*')
r.search(my_text)
match = m.group(1)

但是没有成功。

我捕获 string1 没有问题如果文本中仅出现一次由 <> 包围的字符串,则使用更简单的正则表达式与:

r = re.compile('.*<.*?>.*')

但是当文本有多个正则表达式时,我无法识别正确的正则表达式。我不确定我是否理解 () 的作用和?对于这个问题正确。

如何捕获第一个 string1在上面的例子中?

最佳答案

尝试这个正则表达式:

import re

my_text = "*<string1>*<string2>*<string3>*"
r = re.compile('(?<=\<)[^>]*')

print r.search(my_text).group(0)

print r.findall(my_text) #This will get an array of all matches.

(?<=\<)是一个lookbehind,意思是检查匹配,但不捕获

关于python - 构建正则表达式以匹配 Python 中多个匹配项中的第一个匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9576562/

相关文章:

python - 有没有办法在不暂停整个程序的情况下模拟 time.sleep() 函数的效果?

python - def 函数不合适?

regex - 如何在 bash 中使用正则表达式来选择双引号之间的字符串?

c# - 需要将字符串拆分为子字符串但不能使用拆分

regex - 用于文本框验证的 HTML5 正则表达式模式 : allow alphabet, 空格和连字符

python - 如何使用 FlaskClient 测试分段上传(用于单元测试)

具有异步 I/O 的 Python 循环依赖

python - 将 cython 函数传递给 cython 函数

mysql - 如何删除字符串的格式部分?

python - python正则表达式中的特殊字符问题