bla*_*238 4 python regex regex-group
这可能是一个愚蠢的问题,但......
假设您有一句话:
快速的棕色狐狸
或者你可能会得到一句话:
快速的棕色狐狸跳过懒狗
简单的正则表达式(\ w*)找到第一个单词"The"并将其放入一个组中.
对于第一句,你可以写(\ w*)\ s*(\ w*)\ s*(\ w*)\ s*(\ w*)\ s*将每个单词放在自己的组中,但是假设您知道句子中的单词数量.
是否有可能编写一个正则表达式,将任意句子中的每个单词放入其自己的组中?如果您可以执行类似(?:(\w*)\ s*)*的操作以将其分组(\ w*)的每个实例,那将是很好的,但这不起作用.
我在Python中这样做,我的用例显然比"快速棕色狐狸"复杂一点,所以如果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']
Run Code Online (Sandbox Code Playgroud)
您还可以在模块re中使用findall函数
import re
>>> re.findall("\w+", "The quick brown fox")
['The', 'quick', 'brown', 'fox']
Run Code Online (Sandbox Code Playgroud)
我不相信这是可能的.正则表达式将捕获与给定正则表达式中的括号配对...如果您只列出了一个组,如'((\ w +)\ s +){0,99}',那么它只会重复捕获到相同的第一个和第二组...不为每个找到的匹配创建新组.
您可以使用split,但只能拆分一个字符值,而不是像空格一样的字符类.
相反,你可以使用re.split,它可以在正则表达式上拆分,并给它'\ s'来匹配任何空格.您可能希望它匹配'\ s +'以贪婪地收集空白.
>>> import re
>>> help(re.split)
Help on function split in module re:
split(pattern, string, maxsplit=0)
Split the source string by the occurrences of the pattern,
returning a list containing the resulting substrings.
>>> re.split('\s+', 'The quick brown\t fox')
['The', 'quick', 'brown', 'fox']
>>>
Run Code Online (Sandbox Code Playgroud)