给定字符串1.blah blah2.yada yada
我想提取1.blah blah
和2.yada yada
。我尝试了这个\d\..+
,但它匹配整个字符串。 \d\..+?
匹配1.b
和2.y
。我只需要懒洋洋地匹配模式。有什么想法吗?
答案 0 :(得分:1)
模式结尾处的.+
匹配除了换行符之外的所有1 +字符,直到字符串/行结束。模式末尾的.+?
只匹配1个字符(但它是必需的),因为+?
是一个惰性量词,只需要1个字符。
您可以使用
\d+\..*?(?=\d+\.|$)
请参阅regex demo。如果字符串中可以有换行符,请添加re.DOTALL
修饰符。
<强>详情
\d+
- 1+位数\.
- 一个点.*?
- 除了换行符之外的任何0+字符(如果使用re.DOTALL
,甚至包括换行符),尽可能少,直至(但不包括)第一次出现... (?=\d+\.|$)
- (与两个备选方案中的任何一个匹配的正向前瞻:) 1+位数,然后是.
或字符串结尾。Python演示:
import re
rx = r"\d+\..*?(?=\d+\.|$)"
s = "1.blah blah2.yada yada3.yadddaaa"
print(re.findall(rx, s))
# => ['1.blah blah', '2.yada yada', '3.yadddaaa']
请参阅Python demo。