如何使用python中的正则表达式从字符串中检索子字符串

时间:2013-10-07 17:08:51

标签: python regex csv python-3.x

我有

形式的数据
CS989_-RED814298959
CS663_RED812657324
RED819238322_CS537
......

此数据位于csv文件中。我想检索以RED开头的所有子字符串。 请建议我使用python

中的正则表达式来实现此目的

我尝试了以下代码:

import re
string="RED819238322_CS537"
substring=re.match("[a-zA-Z]*//([0-9]*)",string)

它返回无

3 个答案:

答案 0 :(得分:2)

如果您不需要正则表达式,请不要使用正则表达式。

with open('myfile') as f:
    print([l for l in f if l.startswith('RED')])

根据需要进行更改,即使用csv.reader

with open('myfile') as f:
    print([row for row in csv.reader(f) if row[0].startswith('RED')])

答案 1 :(得分:0)

  

帮助模块中的函数匹配:

     

匹配(pattern,string,flags = 0)       尝试在字符串的开头应用模式,返回       匹配对象,如果未找到匹配则为None。

您需要re.searchre.findall。你的正则表达式也是不正确的 - 如果你想要的只是“红色”后跟任意数字的数字,它的拼写是r"RED[0-9]+"

>>> strings
['CS989_-RED814298959', 'CS663_RED812657324', 'RED819238322_CS537']
>>> re.match(r"(RED[0-9]+)", strings[0])
>>> re.findall(r"(RED[0-9]+)", strings[0])
['RED814298959']
>>> re.findall(r"(RED[0-9]+)", strings[1])
['RED812657324']
>>> re.findall(r"(RED[0-9]+)", strings[2])
['RED819238322']
>>> re.search(r"(RED[0-9]+)", strings[0])
<_sre.SRE_Match object at 0x1772e40>

答案 2 :(得分:0)

那里有什么斜杠?试试这个:

substring=re.match("[a-zA-Z]*([0-9]*)", string)