我在CSV文件中有一个数据列表。
我正在使用循环将它们变成字段...我需要一个代码,在代码中查找与此类代码不匹配的字段“[A9] 9AA9#9”让我们说“A”可以是任何字母和“9”可以是任何数字。但是,[]和#符号必须与格式位于同一位置。
def code():
match= 0
tree_file.readline() # skip first row
for row in tree_file:
field=row.strip()
field=field.split(",") # make Into fields
code=(field[4])
if code != "[X9]9XX9#9": #HERE SHOULD BE THE CODE
match+=1
请您在代码中留下一些评论,以便我能理解它们,因为我无法理解其他可用的解决方案与我的问题有什么关系。
答案 0 :(得分:2)
您可以尝试使用以下正则表达式。这将接受小写和大写字母([a-zA-Z]
)和各自位置的数字(\d
)。我们首先编译pattern
,这是我们试图匹配的正则表达式(有关更详细的正则表达式解释,请参阅here)。然后使用re.match
尝试将输入字符串“匹配”到模式。如果模式匹配,group()
方法将返回匹配的组。如果没有,re.match()
将返回None
(您可以比我在下面处理得更好:) :):
In [11]: import re
In [12]: pattern = re.compile(r'\[[a-zA-z]\d\]\d[a-zA-Z]{2}\d#\d')
In [13]: re.match(pattern, '[X9]9XX9#9').group()
Out[13]: '[X9]9XX9#9'
In [14]: re.match(pattern, '[Z7]3JK2#1').group()
Out[14]: '[Z7]3JK2#1'
In [15]: re.match(pattern, '[ZZ]3JK2#1').group()
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-15-48efdbbda230> in <module>()
----> 1 re.match(pattern, '[ZZ]3JK2#1').group()
AttributeError: 'NoneType' object has no attribute 'group'
处理不匹配情况的一种方法是将结果分配给变量,然后根据它是否返回任何内容进行处理:
In [16]: match = re.match(pattern, '[ZZ]3JK2#1')
In [17]: if match:
...: print match.group()
...:
In [5]:
答案 1 :(得分:1)
您需要的正则表达式是:
r'\[[A-Za-z][0-9]+\][0-9]+[A-Za-z]{2}[0-9]+#[0-9]+'
所以代码可以像
import re
if re.search(r'\[[A-Za-z][0-9]+\][0-9]+[A-Za-z]{2}[0-9]+#[0-9]+', code) is None:
match += 1
<强>解释强>
[A-Za-z] : matches any alphabet
[0-9]+ : matches one or more digits
[A-Za-z]{2} : matches two alphabets
<强>输出强>
>>> import re
>>> s = "[X9]9XX9#9"
>>> re.search(r'\[[A-Za-z][0-9]+\][0-9]+[A-Za-z]{2}[0-9]+#[0-9]+', s) is None
False
>>> s = "ABCD"
>>> re.search(r'\[[A-Za-z][0-9]+\][0-9]+[A-Za-z]{2}[0-9]+#[0-9]+', s) is None
True
>>> s = "[A123]456BB8#789"
>>> re.search(r'\[[A-Za-z][0-9]+\][0-9]+[A-Za-z]{2}[0-9]+#[0-9]+', s) is None
False
>>>
答案 2 :(得分:1)
reg = re.compile(r'\[[A-Z][0-9]\][0-9][A-Z]{2}[0-9]#[0-9]')
适合我...
-
运算符定义了一个范围,[]必须进行转义,如definition所示,[]
运算符与一组字符匹配。如果需要与语言环境无关的解决方案,也可以使用Unicode字符类来执行此操作。