这是我的表达:
r'.*?(\d*)\s(good|bad).*\:\s(\d*)'`
字符串:
Hello 30 good. found: 50.
Hello 10 bad.
我的问题是:我的表达式匹配(30,良好和50)第一个字符串,但我如何让它匹配(10,坏)第二个?
截至目前,该表达式省略了第二行,因为它不符合描述
谢谢!
答案 0 :(得分:4)
只需使用?
量词来使第二部分成为可选项: -
r'.*?(\d*)\s(good|bad)(?:.*\:\s(\d*))?'
使用(?:.*\:\s(\d*))?
使模式.*\:\s(\d*)
可选。由于?
表示匹配0 or 1
。
请注意,我已使用non-capturing
组进行额外分组,以使其成为可选项。通过使用此功能,您的捕获组编号不会与当前编号相同。因为,非捕获组 - (?:...)
事物,在捕获的组计数中不予考虑。
答案 1 :(得分:0)
我认为这应该有用
r'.*?(\d+)\s(good|bad)[^\d]*(\d*)'