python - 具有重复组的正则表达式

标签 python regex

我一直在尝试匹配连字符之间的短语。我意识到我可以轻松地拆分连字符并取出短语,但我的等效正则表达式无法按预期工作,我想了解原因:

([^-,]+(?:(?: - )|$))+

[^-,]+ 只是我对短语的定义

(?: - ) 只是非捕获空格分隔的连字符

so (?:(?: - )|$)正在捕获连字符或行尾

最后,用 + 量词括在括号中的整个内容匹配多个。

如果我执行regex.match("A - B - C").groups(),我得到的是('C',)

我还尝试了更简单的正则表达式 ([^,-]+)+ ,结果相似

我使用 re.match 因为我想使用 pandas.Series.str.extract 将其应用到一个很长的列表。

重申一下:我现在在连字符上使用简单的split,但为什么这个正则表达式不返回多个组?

谢谢

最佳答案

正则表达式捕获组根据其在表达式中的出现进行静态“命名”。每个捕获组都有自己的编号,并且无论单个组捕获某些内容的频率如何,都会将匹配项分配给该组。

如果一个组之前捕获了某些内容,之后又再次捕获了某些内容,那么后面的结果将覆盖之前捕获的内容。无法使用正常匹配来收集组的所有捕获值。

如果您想查找多个值,则只需匹配单个组并重复匹配字符串的其余部分。这通常由 re.findallre.finditer 完成:

>>> re.findall('\s*([^-,]+?)\s*', 'A - B - C')
['A', 'B', 'C']

关于python - 具有重复组的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30097158/

相关文章:

python - 获取句子列表的词频,但不合并。 (Python)

python - 遍历数据框并根据字典条件进行更新

python - 什么是 [ :, :-1] in python?

python - 拿一个列表,按受欢迎程度排序,然后删除重复项

r - 如何为特定范围创建和插入带有分类变量的列

javascript - 改进 HTML-Tagname-strip 的正则表达式

Python:计算文件中一组字符串的出现次数

用于覆盖文件路径的 JavaScript 正则表达式

javascript - 正则表达式 - 匹配某些定界符之间的任何文本

Javascript正则表达式,循环中的变量带有转义字符