【问题标题】:How to retrieve substring form a string using regular expression in python如何在python中使用正则表达式从字符串中检索子字符串
【发布时间】:2013-10-14 08:57:24
【问题描述】:

我有表格的数据

CS989_-RED814298959
CS663_RED812657324
RED819238322_CS537
......

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

我尝试了以下代码:

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

它返回无

【问题讨论】:

  • 请把你尝试过的问题写在你的问题中。
  • 什么是“子字符串”?您能否发布示例输入的预期结果?
  • 您的数据中没有//,您为什么希望它匹配?
  • @brunodesthuilliers 输出应该是一个列表 ["RED814298959",RED812657324,RED819238322]

标签: python regex csv python-3.x


【解决方案1】:

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

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')])

【讨论】:

  • 我不能使用“startwith”,因为有时会出现子字符串
【解决方案2】:

模块re中的函数匹配帮助:

匹配(模式、字符串、标志=0) 尝试在字符串的开头应用模式,返回 一个匹配对象,如果没有找到匹配项,则为 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>

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-03-05
      • 2019-10-17
      • 1970-01-01
      • 1970-01-01
      • 2021-09-25
      • 2019-05-02
      • 2010-10-14
      • 1970-01-01
      相关资源
      最近更新 更多