Python Regex匹配与否

时间:2013-01-28 20:21:45

标签: python regex

这是我的表达:

r'.*?(\d*)\s(good|bad).*\:\s(\d*)'`

字符串:

Hello 30 good. found: 50.

Hello 10 bad.

我的问题是:我的表达式匹配(30,良好和50)第一个字符串,但我如何让它匹配(10,坏)第二个?

截至目前,该表达式省略了第二行,因为它不符合描述

谢谢!

2 个答案:

答案 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*)'