gpt4 book ai didi

python - 正则表达式:匹配空格连接的单词列表,不包括最后一个空格

转载 作者:行者123 更新时间:2023-12-01 06:17:08 28 4
gpt4 key购买 nike

如何匹配以空格分隔的单词列表,后跟空格和一些可选数字?我有这个:

>>> import re
>>> m = re.match('(?P<words>(\S+\s+)+)(?P<num>\d+)?\r\n', 'Foo Bar 12345\r\n')
>>> m.groupdict()
{'num': '12345', 'words': 'Foo Bar '}

我希望单词组不包含最后一个空格,但我无法弄清楚这个。我可以对结果执行 .strip() 但那没那么有趣:)

<小时/>

一些要测试的字符串和想要结果:

'Foo & Bar 555\r\n' => {'num': '555', 'words': 'Foo & Bar'}

'Hello World\r\n' => {'num': None, 'words': 'Hello World'}

'Spam 99\r\n' => {'num': 99, 'words': 'Spam'}

'Number 1 666\r\n' => {'num': 666, 'words': 'Number 1'}

最佳答案

我对你的双重捕获组有点困惑,而且你使用 \w 但想要匹配非单词字符,例如 & (也许你的意思是 \S,非空格,你说 \w...?),但是,也许...:

>>> import re
>>> r = re.compile(r'(?P<words>\w+(?:\s+\S+)*?)\s*(?P<num>\d+)?\r\n')
>>> for s in ('Foo & Bar 555\r\n', 'Hello World\r\n', 'Spam 99\r\n',
... 'Number 1 666\r\n'):
... print s, r.match(s).groupdict()
...
Foo & Bar 555
{'num': '555', 'words': 'Foo & Bar'}
Hello World
{'num': None, 'words': 'Hello World'}
Spam 99
{'num': '99', 'words': 'Spam'}
Number 1 666
{'num': '666', 'words': 'Number 1'}
>>>

关于python - 正则表达式:匹配空格连接的单词列表,不包括最后一个空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2699366/

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