2024-05-16 17:36:50 发布
网友
我有一个带有可选字符的regex模式,但是在输出处我想删除这些可选字符。示例:
string = 'a2017a12a' pattern = re.compile("((20[0-9]{2})(.?)(0[1-9]|1[0-2]))") result = pattern.search(string) print(result)
我可以有这样的匹配,但我想要的输出是:
谢谢。在
您只需将re.sub与模式\D(=不是数字)一起使用:
re.sub
\D
>>> import re >>> string = 'a2017a12a' >>> re.sub(r'\D', '', string) '201712'
您已经在组中捕获了预期的数据,现在可以使用re.sub将整个匹配替换为group1和group2的内容。在
试试你修改过的Python代码
import re string = 'a2017a12a' pattern = re.compile(".*(20[0-9]{2}).?(0[1-9]|1[0-2]).*") result = re.sub(pattern, r'\1\2', string) print(result)
请注意,我是如何在模式周围添加.*,这样数据周围的任何额外字符都将匹配并删除。此外,删除了不需要的额外括号。这也适用于字符串,在这些字符串周围可能有其他数字,例如hello123 a2017a12a some other 99 numbers
.*
hello123 a2017a12a some other 99 numbers
输出
Regex Demo
试试这个:
import re string = 'a2017a12a' pattern = re.findall("(\d+)", string) # this regex will capture only digit print("".join(p for p in pattern)) # combine all digits
输出:
您只需将
re.sub
与模式\D
(=不是数字)一起使用:您已经在组中捕获了预期的数据,现在可以使用
re.sub
将整个匹配替换为group1和group2的内容。在试试你修改过的Python代码
请注意,我是如何在模式周围添加
.*
,这样数据周围的任何额外字符都将匹配并删除。此外,删除了不需要的额外括号。这也适用于字符串,在这些字符串周围可能有其他数字,例如hello123 a2017a12a some other 99 numbers
输出
^{pr2}$Regex Demo
试试这个:
输出:
^{pr2}$相关问题 更多 >
编程相关推荐