1

我有表格的数据

CS989_-RED814298959
CS663_RED812657324
RED819238322_CS537
......

此数据在 csv 文件中。我想检索所有以 RED 开头的子字符串。请建议我在python中使用正则表达式来做到这一点

我尝试了以下代码:

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

它返回无

4

3 回答 3

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')])
于 2013-10-07T17:22:21.800 回答
0

关于模块 re 中功能匹配的帮助:

match(pattern, string, flags=0) 尝试在 string 的开头应用模式,返回一个匹配对象,如果没有找到匹配项,则返回 None。

你想要re.searchre.findall相反。您的正则表达式也不正确-如果您想要的只是“RED”后跟任意数量的数字,则拼写为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>
于 2013-10-07T17:33:46.967 回答
0

那些斜线在里面做什么?试试这个:

substring=re.match("[a-zA-Z]*([0-9]*)", string)
于 2013-10-07T21:16:04.550 回答