Python正则表达式返回最后一个匹配字符的额外捕获组

泰勒

我试图创建一个正则表达式,将字符串作为字符串并将其分为三组:(1)字符串开头的特定单词列表中的任何一个。(2)字符串末尾的任何特定单词列表。(3)这两个匹配项之间的所有字母/空格。

例如,我将使用以下两个字符串:

'There was a cat in the house yesterday'
'Did you see a cat in the house today'

我希望将字符串分成多个捕获组,以便match对象m.groups()将分别为每个字符串返回以下内容:

('There', ' was a cat in the house ', 'yesterday')
('Did', ' you see a cat in the house ', 'today')

最初,我想出了以下正则表达式:

r = re.compile('^(There|Did) ( |[A-Za-z])+ (today|yesterday)$')

但是,这返回:

('There', 'e', 'yesterday')
('Did', 'e', 'today')

所以这只是给我最后一组匹配的字符。我了解到这是行不通的,因为捕获组将仅返回匹配的最后一次迭代。因此,我在中间捕获组周围加上了括号,如下所示:

r = re.compile('^(There|Did) (( |[A-Za-z])+) (today|yesterday)$')

但是现在,尽管它至少捕获了中间组,但它还在中返回了一个额外的“ e”字符m.groups(),即:

('There', 'was a cat in the house', 'e', 'yesterday')

...尽管我觉得这与回溯有关,但我不知道为什么会发生。有人可以向我解释为什么我得到这个结果,以及如何得到期望的结果吗?

纳尔
 r = re.compile('^(There|Did) (( |[A-Za-z])+) (today|yesterday)$')
                               ^ ^        ^

你有一些不必要的东西。删除这些内容并在中间组中添加空格:

r = re.compile('^(There|Did) ([A-Za-z ]+) (today|yesterday)$')
                                     ^ space

例子:

>>> r = re.compile('^(There|Did) ([A-Za-z ]+) (today|yesterday)$')
>>> r.search('There was a a cat in the hosue yesterday').groups()
('There', 'was a a cat in the hosue', 'yesterday')

另外,如果您希望这些空间成为中间(第二个)组的一部分,请取出两个捕获组之间的空间

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么ruby只返回正则表达式的最后一个匹配项?

来自分类Dev

javascript正则表达式匹配仅返回最后一个匹配

来自分类Dev

正则表达式以匹配捕获组中的前一个或后一个字母字符

来自分类Dev

为什么我的正则表达式捕获组在匹配多个部分时仅捕获字符串的最后一部分?

来自分类Dev

排除正则表达式匹配的最后一个字符

来自分类Dev

用正则表达式捕获一个或另一个组

来自分类Dev

如何在一个正则表达式中捕获所有正则表达式组?

来自分类Dev

正则表达式:将所有内容匹配到一个可选的捕获组

来自分类Dev

为什么带有包含捕获组的正则表达式的string.split返回一个以空字符串结尾的数组?

来自分类Dev

将正则表达式从字符匹配到行尾,但忽略最后一个字符

来自分类Dev

带有可选组的Python正则表达式,至少匹配一个

来自分类Dev

正则表达式在最后修复一个(所有匹配项或不匹配)

来自分类Dev

Python正则表达式组匹配显示额外的空字符串

来自分类Dev

URL的最后一个字符与正则表达式匹配时重定向URL

来自分类Dev

Python正则表达式返回非捕获组

来自分类Dev

正则表达式模式以匹配除最后一个字符以外的任何字符

来自分类Dev

正则表达式以匹配捕获组中的前一个或后一个字母字符

来自分类Dev

正则表达式:从字符到行尾的匹配,但没有最后一个匹配组

来自分类Dev

正则表达式查找带有最后一个单词和其余文本的捕获组

来自分类Dev

正则表达式以匹配字符串中的最后一个浮点数

来自分类Dev

正则表达式以匹配字符串的第一个匹配项与最后一个匹配的字符串

来自分类Dev

正则表达式匹配的最后一个字符

来自分类Dev

使用正则表达式替换匹配字符串的最后一个字符

来自分类Dev

Java 中的正则表达式——只返回最后一个匹配项

来自分类Dev

正则表达式匹配长度大于 1 的单词的最后一个字符

来自分类Dev

第一个字符出现后的 Python 正则表达式匹配组

来自分类Dev

python正则表达式,只返回第一个匹配项

来自分类Dev

正则表达式匹配字符串中的最后一个字符 - C#

来自分类Dev

Python正则表达式捕获缺少换行符的最后一个单词

Related 相关文章

  1. 1

    为什么ruby只返回正则表达式的最后一个匹配项?

  2. 2

    javascript正则表达式匹配仅返回最后一个匹配

  3. 3

    正则表达式以匹配捕获组中的前一个或后一个字母字符

  4. 4

    为什么我的正则表达式捕获组在匹配多个部分时仅捕获字符串的最后一部分?

  5. 5

    排除正则表达式匹配的最后一个字符

  6. 6

    用正则表达式捕获一个或另一个组

  7. 7

    如何在一个正则表达式中捕获所有正则表达式组?

  8. 8

    正则表达式:将所有内容匹配到一个可选的捕获组

  9. 9

    为什么带有包含捕获组的正则表达式的string.split返回一个以空字符串结尾的数组?

  10. 10

    将正则表达式从字符匹配到行尾,但忽略最后一个字符

  11. 11

    带有可选组的Python正则表达式,至少匹配一个

  12. 12

    正则表达式在最后修复一个(所有匹配项或不匹配)

  13. 13

    Python正则表达式组匹配显示额外的空字符串

  14. 14

    URL的最后一个字符与正则表达式匹配时重定向URL

  15. 15

    Python正则表达式返回非捕获组

  16. 16

    正则表达式模式以匹配除最后一个字符以外的任何字符

  17. 17

    正则表达式以匹配捕获组中的前一个或后一个字母字符

  18. 18

    正则表达式:从字符到行尾的匹配,但没有最后一个匹配组

  19. 19

    正则表达式查找带有最后一个单词和其余文本的捕获组

  20. 20

    正则表达式以匹配字符串中的最后一个浮点数

  21. 21

    正则表达式以匹配字符串的第一个匹配项与最后一个匹配的字符串

  22. 22

    正则表达式匹配的最后一个字符

  23. 23

    使用正则表达式替换匹配字符串的最后一个字符

  24. 24

    Java 中的正则表达式——只返回最后一个匹配项

  25. 25

    正则表达式匹配长度大于 1 的单词的最后一个字符

  26. 26

    第一个字符出现后的 Python 正则表达式匹配组

  27. 27

    python正则表达式,只返回第一个匹配项

  28. 28

    正则表达式匹配字符串中的最后一个字符 - C#

  29. 29

    Python正则表达式捕获缺少换行符的最后一个单词

热门标签

归档