Python 正则表达式在模式中用可选词拆分

标签 python regex

我正在尝试围绕可能包含也可能不包含特定单词的特定短语拆分字符串。我正在努力为此寻找正确的语法。

这是代码的当前版本:

import re
from pprint import pprint

text = """Here is a list: Bob talked to Caleb, and Caleb talked to Derek, and Derek talked to Eric, and Eric talked to Fred, and Fred talked to Greg, and Greg talked to Henry, and Henry talked to Isaac, and Isaac talked to Jesse, and Jesse talked to Ken."""

pprint(re.split(r"(a?n?d? ?\w+ talked to)",text))

在这个例子中,我想在“Bob talked to”或“and Caleb talked to”上进行拆分,所以如果不存在,则应该包含 and 。

此代码产生(几乎正确):

['Here is a list:',
 ' Bob talked to',
 ' Caleb, ',
 'and Caleb talked to',
 ' Derek, ',
 'and Derek talked to',
 ' Eric, ',
 'and Eric talked to',
 ' Fred, ',
 'and Fred talked to',
 ' Greg, ',
 'and Greg talked to',
 ' Henry, ',
 'and Henry talked to',
 ' Isaac, ',
 'and Isaac talked to',
 ' Jesse, ',
 'and Jesse talked to',
 ' Ken.']

唯一的一个小错误是“​​Bob”前面有一个空格,因为有一个“?”所以被抓了。在正则表达式中。所以我不想要每个字母“a?n?d??”。我宁愿有“(和)?”

不幸的是,这些是结果:

print(re.split(r"((and )?\w+ talked to)",text))

给我:

['Here is a list: ',
 'Bob talked to',
 None,
 ' Caleb, ',
 'and Caleb talked to',
 'and ',
 ' Derek, ',
 'and Derek talked to',
 'and ',
 ' Eric, ',
 'and Eric talked to',
 'and ',
 ' Fred, ',
 'and Fred talked to',
 'and ',
 ' Greg, ',
 'and Greg talked to',
 'and ',
 ' Henry, ',
 'and Henry talked to',
 'and ',
 ' Isaac, ',
 'and Isaac talked to',
 'and ',
 ' Jesse, ',
 'and Jesse talked to',
 'and ',
 ' Ken.']

在这里,它正在分别寻找两个单元。我也许可以使用它,但如果它是一个单元会更好。

另一种选择可能是:

pprint(re.split(r"([and ]?\w+ talked to)",text))

给予:

['Here is a list:',
 ' Bob talked to',
 ' Caleb, and',
 ' Caleb talked to',
 ' Derek, and',
 ' Derek talked to',
 ' Eric, and',
 ' Eric talked to',
 ' Fred, and',
 ' Fred talked to',
 ' Greg, and',
 ' Greg talked to',
 ' Henry, and',
 ' Henry talked to',
 ' Isaac, and',
 ' Isaac talked to',
 ' Jesse, and',
 ' Jesse talked to',
 ' Ken.']

在这种情况下,即使“and”可用,它也不会被包括在内。那么我怎样才能使“和”成为一个可选的单元呢?换句话说,“和”不是进就是出,而不是部分进出。

最佳答案

我想这就是你想要的:

((?:and )?\w+ talked to)

(?:and ) 是一个非捕获组,因此它匹配但未被捕获。

关于Python 正则表达式在模式中用可选词拆分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49420276/

相关文章:

python - 从 Compute Engine 与 App Engine 通信的安全方式

java - 在 Java 正则表达式中获取多个模式的重叠匹配

html - 在 Regexp 中解析 HTML 样式

python - 根据行值合并 Pandas 数据框

python - pyqtgraph 的性能问题

python - 如何将 iter(v,w) 与函数一起使用?

python - 当我将它粘贴到 vim 中时,为什么会出现语法错误?

regex - 在 Notepad++ 中删除数字

regex - 如何使用 bash 将每一行提取到不同的变量中

regex - 如何从 bash 中的字符串中提取值?