gpt4 book ai didi

python - python 中的正则表达式 :groups and |

转载 作者:太空宇宙 更新时间:2023-11-04 10:58:57 25 4
gpt4 key购买 nike

我找不到如何处理正则表达式,这里是一个例子:

string = "red\\/banana 36    monkey\\/apple 14   red\\/apple 23  red\\/horse 56  bull\\/red 67  monkey\\/red 45    bull\\/shark 89"

我想用 re.match.group() 做一个单一的正则表达式,它将只考虑像 red/xxxx 和像 xxxx/red 这样的那些并将 xxxx 分组 只有名字,没有情侣:

我想做的事:

print(match.group("beginningwithred") + " " + match.group("number")

并获得:

banana 36
apple 23
horse 56

然后做:

print(match.group("endingwithred") + " " + match.group("number")

并获得:

bull 67
monkey 45

我目前的代码是这样的:

iterator = regex.finditer(string)
for match in iterator:
regex = re.compile('red\\\\\\\\/(?P<beginningwithred>banana|apple|horse)|(?P<endingwithred>bull|monkey)\\\\\\\\/red (?P<number>\d\d)')

但是不行,我不能用|组之间和 python HOWTO 没有帮助..我也尝试使用 { } 包括整个两个表达式,但它也不起作用。它一定不是很复杂,但我找不到问题所在。

最佳答案

我不完全理解,但听起来你希望非捕获组围绕你的替代方案:

(?:foo|bar|baz)

这让您可以使用 | 而无需创建“真实”组。


更新 为什么这没有帮助?这不对吗?

>>> s="red\\/banana 36    monkey\\/apple 14   red\\/apple 23  red\\/horse 56  bull\\/red 67  monkey\\/red 45    bull\\/shark 89"
>>> r = re.compile(r'(?:red\\/(?P<begin>\w+)|(?P<end>\w+)\\/red)\s+(?P<number>\d+)')
>>> for m in r.finditer(s):
... print(m.groups())

('banana', None, '36')
('apple', None, '23')
('horse', None, '56')
(None, 'bull', '67')
(None, 'monkey', '45')

更新2

如果您只想打印出非None 值,您可以这样做:

  >>> for m in r.finditer(s):
... print(','.join(g for g in m.groups() if g is not None))

关于python - python 中的正则表达式 :groups and |,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7182516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com