我想捕捉n个单词x周围没有空格的单词。我需要一个捕捉组来记录每个单词。我可以通过以下方式实现这一点(以下是x后的单词):
import regex
n = 2
x = 'beef tomato chicken trump Madonna'
right_word = '\s+(\S+)'
regex_right = r'^\S*{}\s*'.format(n*right_word)
m_right = regex.search(regex_right, x)
print(m_right.groups())
所以如果x='牛肉番茄鸡肉特朗普麦当娜',n=2,regex_right = '^\S*\s+(\S+)\s+(\S+)\s*'
,我得到两个包含'番茄'和'鸡肉'的捕获组。但是,如果n=5,我没有捕捉到任何不是我想要的行为。对于n=5,我想捕捉“牛肉”右边的所有单词。在
我试过用贪婪量词
^{pr2}$但是我只得到一个组(最后一个词),不管我得到多少匹配(而且我也得到了空白)。在
我终于试着用正则表达式findall但我不能把它限制在n个单词,而是必须指定字符数?在
有人能帮忙吗?在
维克托帮了我(见下文)谢谢。不过,我还有一个问题
如果 x='牛肉,番茄,鸡肉,特朗普麦当娜' 我想不出没有逗号怎么捕捉?我不想把“西红柿”这一组
因为模式与输入字符串不匹配,所以没有将所有这些单词与第一种方法匹配。您需要将括起来,使其成为可选的:
right_word
模式用^{参见Python demo。在
第二种方法只适用于PyPi regex模块,因为Python
^{pr2}$re
不保留重复的捕获,一旦量化的捕获组在相同的匹配迭代中再次匹配子字符串,它的值将被重新写入。在注意,
^\S*(?:\s+(\S+)){1,5}
在用{1,5}
限定量词量化的量化非捕获组中有一个捕获组1,并且由于PyPi regex跟踪用重复捕获组捕获的所有值,因此可以通过此处的.captures(1)
访问这些值。您可以使用.NET regex tester:测试此功能你找到了正确的方法。但是regex不能满足你的要求。每次捕获组捕获另一个模式时,以前的内容都会被替换。这就是为什么您的捕获组只返回最后捕获的模式。
可以很容易地匹配n个单词,但是如果不显式地编写每个捕获组,则无法分别捕获它们。在
相关问题 更多 >
编程相关推荐