模式匹配

2024-04-27 22:24:17 发布

您现在位置:Python中文网/ 问答频道 /正文

给定字符串1.blah blah2.yada yada,我想提取1.blah blah2.yada yada。我尝试了这个\d\..+,但是它匹配了整个字符串。\d\..+?匹配1.b2.y。我只需要懒洋洋地配合这个模式。有什么想法吗?你知道吗


Tags: 字符串模式blahblah2yada
1条回答
网友
1楼 · 发布于 2024-04-27 22:24:17

模式末尾的.+匹配除换行符以外的所有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。你知道吗

相关问题 更多 >