如何消除对字符串python正则表达式中间字母数字字符的检查



我想消除"CC1009〃;并且需要检查包括在内的剩余部分。"ABC"Tx"XYZ"20200506";(日期(*这4个值是修正

因此,除了这篇文章"ABCTxXYZCC100920200506050003.xml"="ABCTxXYZ CC1009 2020050605000 3.xml"我想我的表情不应该检查这样的东西-CC1009XYZ之后至20200506(日期(之前

此值CC1009是动态的,它在某些文件中可用,在某些文件也不可用,也没有定义长度。请相应地帮助我

我尝试了下面的代码,但它不起作用(python-regex(

import re
file_name = 'ABCTxXYZCC100920200506050003.xml'
Split Example = 'ABC  Tx  XYZ  CC1009  20200506  050003.xml'

RegexPattern = re.compile(r'^(ABC|CDE)+(Tx|Fm)+(XYZ)+([a-zA-Z0-9]*)+([0-9]{4})+(0[1-9]|1[012])+(0[1-9]|[12][0-9]|3[01])+(.+)$')
pattern_check = RegexPattern.match(file_name)
if pattern_check:
print('Match')
else:
print('No Match')

您可以删除捕获组之后的所有+字符。由于CC1009是动态的,您可以使用字符类并使其成为非贪婪的[a-zA-Z0-9]*?,以防止匹配过多的数字。

如果您希望日期是一个完整的组,您可以创建一个捕获组,并在其中使用一个非捕获组(?:作为月份和日期部分。

^(ABC|CDE)(Tx|Fm)(XYZ)([a-zA-Z0-9]*?)([0-9]{4}(?:0[1-9]|1[012])(?:0[1-9]|[12][0-9]|3[01]))(.+)$

Regex演示| Python演示

示例代码

import re
file_name = 'ABCTxXYZCC100920200506050003.xml'
RegexPattern = re.compile(r'^(ABC|CDE)(Tx|Fm)(XYZ)([a-zA-Z0-9]*?)([0-9]{4}(?:0[1-9]|1[012])(?:0[1-9]|[12][0-9]|3[01]))(.+)$')
pattern_check = RegexPattern.match(file_name)
if pattern_check:
print('Match')
else:
print('No Match')

print(re.findall(RegexPattern, file_name))
print(re.findall(RegexPattern, "ABCTxXYZ20200506050003.xml"))

输出

Match
[('ABC', 'Tx', 'XYZ', 'CC1009', '20200506', '050003.xml')]
[('ABC', 'Tx', 'XYZ', '', '20200506', '050003.xml')]

相关内容

最新更新