我想消除"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')]