【发布时间】:2011-03-13 03:26:30
【问题描述】:
这可能是一个愚蠢的问题,但是......
假设你有这样一句话:
快速的棕色狐狸
或者你可能会得到这样的句子:
敏捷的棕狐跳过了懒狗
简单的正则表达式 (\w*) 找到第一个单词“The”并将其放入一个组中。
对于第一句话,你可以写成 (\w*)\s*(\w*)\s*(\w*)\s*(\w*)\s* 将每个单词放在自己的位置组,但前提是您知道句子中的单词数。
是否可以编写一个正则表达式,将任意句子中的每个单词放入自己的组中?如果您可以执行类似 (?:(\w*)\s*)* 之类的操作来将 (\w*) 的每个实例分组,那就太好了,但这不起作用。
我在 Python 中执行此操作,而且我的用例显然比“The quick brown fox”要复杂一些,因此如果 Regex 可以在一行中执行此操作会很不错,但如果这不可能,那么我假设下一个最佳解决方案是使用 re.findall() 或类似的方法遍历所有匹配项。
感谢您提供的任何见解。
编辑:为了完整起见,这是我的实际用例以及我如何使用您的帮助解决它。再次感谢。
>>> s = '1 0 5 test1 5 test2 5 test3 5 test4 5 test5'
>>> s = re.match(r'^\d+\s\d+\s?(.*)', s).group(1)
>>> print s
5 test1 5 test2 5 test3 5 test4 5 test5
>>> list = re.findall(r'\d+\s(\w+)', s)
>>> print list
['test1', 'test2', 'test3', 'test4', 'test5']
【问题讨论】:
-
我认为每次在上面输入“\s*”时都需要“\s+”。我不确定您是否可以一次匹配并捕获所有单词。
-
.NET 在匹配中保持一组重复捕获;我认为到目前为止,这种风味是独一无二的。
-
很高兴知道,我偶尔会使用 C#,并且会记住这一点。有关于该功能的任何文档的链接吗?
标签: python regex regex-group