我有一个要在邮件中搜索的模式。 模式是:
1. "aaa-b3-c"
2. "a3-b6-c"
3. "aaaa-bb-c"
我知道如何搜索其中一种模式,但是如何搜索全部3种模式?
此外,您如何识别和提取以下格式的日期:5/21或5/21/2019。
found = re.findall(r'.{3}-.{2}-.{1}', message)
答案 0 :(得分:1)
第一部分可能是量词{2,4}
而不是3。点与换行符匹配,除换行符外,[a-zA-Z0-9]
将与大写或小写字符a-z或数字匹配:
\b[a-zA-Z0-9]{2,4}-[a-zA-Z0-9]{2}-[a-zA-Z0-9]\b
如果字符不应该是较长单词的一部分,则可以在任一侧添加单词边界\b
或锚点^
和$
。
对于第二种模式,您还可以使用\d
和量词来匹配数字,并使用可选的模式来匹配带有/和4位数字的部分:
\d{1,2}/\d{2}(?:/\d{4})?
请注意,该格式不会验证日期本身。也许this page可以帮助您创建/自定义更具体的日期格式。
答案 1 :(得分:1)
尝试一下:
found = re.findall(r'a{2,4}-b{2}-c', message)
答案 2 :(得分:0)
您可以使用
a{2,4}-bb-c
作为模式。
match = re.search(pattern, string)
if match:
# do sth. here
从Python 3.8
起,您可以像在{p>中那样使用walrus
运算符
if (match := re.search(pattern, string)) is not None:
# do sth. here
答案 3 :(得分:0)
尝试一下:
re.findall(r'a.*-b.*-c',message)
答案 4 :(得分:0)
在这里,我们可能只想编写三个表达式,然后从左向右滑动输入即可,以确保安全并使用逻辑OR进行连接,如果我们有更多的模式,我们可以简单地添加到其中,类似于:< / p>
([a-z]+-[a-z]+[0-9]+-[a-z]+)
([a-z]+[0-9]+-[a-z]+[0-9]+-[a-z])
([a-z]+-[a-z]+-[a-z])
这将添加到:
([a-z]+-[a-z]+[0-9]+-[a-z]+)|([a-z]+[0-9]+-[a-z]+[0-9]+-[a-z])|([a-z]+-[a-z]+-[a-z])
然后,我们可能希望将其与开始和结束字符绑定:
^([a-z]+-[a-z]+[0-9]+-[a-z]+)$|^([a-z]+[0-9]+-[a-z]+[0-9]+-[a-z])$|^([a-z]+-[a-z]+-[a-z])$
或
^(([a-z]+-[a-z]+[0-9]+-[a-z]+)|([a-z]+[0-9]+-[a-z]+[0-9]+-[a-z])|([a-z]+-[a-z]+-[a-z]))$
如果不需要此表达式,可以在regex101.com中对其进行修改或更改。
jex.im可视化正则表达式: