正则表达式_如何从一行中提取几个匹配的模式



我有一个.csv文档,它由几行组成。在每一行中,我都有选项卡分隔的信息,例如,

name_1:ayse t name_2:fatma t birth_date_1:24 t birth_date_2:august t birth_date_3:2018 t death_date:2100 t location:turkey.

这些信息的序列在每一行中可能不相同,并且在每一行都有许多类似的信息。

我想做的是获取字符串中只有"birth_date"信息的特定部分。

我只能得到与出生日期相关的所有3个字符串,如下

['birth_date_1', 'birth_date_2', 'birth_date_3']

借助以下代码。

inputfile = open('ornek_data.csv','r',encoding="utf-8")
for rownum, line in enumerate(inputfile):
pattern_birth = re.compile(r"w*birth_datew*",re.IGNORECASE)
if pattern_birth.search(line) is not None:
a = re.findall("w*birth_datew*", line)
print(a)

然而,我实际上想要的是将下面的列表作为输出进行extact,并将其写入另一个文档中的每一行。

['birth_date_1:24', 'birth_date_2:august', 'birth_date_3:2018']

我尝试了其他几种正则表达式方法,比如下面的方法,但我无法处理。如果有人能帮我解决这个问题,我会很高兴的。

for rownum, line in enumerate(inputfile):
pattern_birth = re.compile(r"w*birth_datew*",re.IGNORECASE)
if pattern_birth.search(line) is not None:
a = re.findall("w*birth_date.*?:$", line)
print(a)

我不会在这里使用regex

't'上拆分,并检查拆分的是否包含'birth_date',简单!:

s =  'name_1:ayse t name_2:fatma t birth_date_1:24 t birth_date_2:august t birth_date_3:2018 t death_date:2100 t location:turkey.'
print([x.strip() for x in s.split('t') if 'birth_date' in x])
# ['birth_date_1:24', 'birth_date_2:august', 'birth_date_3:2018']

使用"w*birth_date.*?s"r"birth_date_d:.*?s"

例如:

import re
line = "name_1:ayse t name_2:fatma t birth_date_1:24 t birth_date_2:august t birth_date_3:2018 t death_date:2100 t location:turkey."
print(re.findall("w*birth_date.*?s", line))

输出:

['birth_date_1:24 ', 'birth_date_2:august ', 'birth_date_3:2018 ']

您的正则表达式与您试图提取的内容不匹配,因此需要对其进行扩展。

顺便说一句,您应该只使用re.compile一次——编译的目的是避免再次解析正则表达式。

也没有必要单独检查是否没有匹配。只要在所有的火柴上循环;如果没有,循环将执行零次。

pat = re.compile(r"bbirth_date_d+:d+",re.IGNORECASE)
with open('ornek_data.csv','r',encoding="utf-8") as inputfile:
for rownum, line in enumerate(inputfile):
for a in pat.findall(line):
print(rownum, a)

w*没有做任何有用的事情(如果你不在乎它是否在那里,就像*量词一样,为什么要搜索它?(而b要求匹配发生在单词边界(如此靠近空白或标点符号,或行首或行尾(。CCD_ 10匹配一个数字,而CCD_。

如果这是一个格式良好的CSV文件,可以使用CSV读取器并打印与startswith('birth_date_')匹配的字段

最新更新