gpt4 book ai didi

python - 通过文本行搜索的正确方法,re.findall() 和 re.search() 都不能完全工作

转载 作者:太空宇宙 更新时间:2023-11-04 11:15:14 24 4
gpt4 key购买 nike

我的问题有点奇怪,也许有人可以提供一些指导。我有一行文本需要搜索并提取多个重复出现的字符串来填充数据框。给定以下行:

txt = "名称:'红色'电线:'R'名称:'蓝色'电线:'B'名称:'橙色'名称:'黄色'电线:'Y'"

我想通过正则表达式并拉出ONLY 完整的名称/电线对(在本例中不是Orange)。

预期输出

Name    Wire
red R
blue B
yellow Y

代码

for line in txt:
line = line.strip()
a = re.search(r' Name : \'((?:(?![(]).)*)\'', line)
if a:
b = re.search(r' Wire : \'((?:(?![(]).)*)\'', line)
if b:
df = df.append({'Name' : a.group(1), 'Wire' : b.group(1)}, ignore_index=True)

此代码生成以下 df:

Name    Wire
red R

这种行为是预料之中的,因为 re.search() 只运行到它第一次找到有问题的项目。

好的,re.search() 不会工作,所以我会尝试 re.findall() 代替:

for line in txt:
line = line.strip()
a = re.findall(r' Name : \"((?:(?![(]).)*)\"', line)
if a:
b = re.findall(r' Wire : \"((?:(?![(]).)*)\"', line)
if b:
df = df.append({'Name' : a, 'Wire' : b}, ignore_index=True)

这将吐出以下 df:

Name                                    Wire
['red','blue','orange','yellow'] ['R','B','Y']

此数据框的问题在于,现在我们不再知道什么 Name 与什么 Wire 相关联。如果 re.search() 还没有到达 txt 行的末尾,有没有什么办法让 re.search() 即使在第一次点击之后继续?任何人对如何仅对包含所有内容的元素(即“名称”“电线”)的文本行进行正则表达式有任何创意?

最佳答案

re.finditer 功能和特定的正则表达式模式:

import pandas as pd
import re

txt = "Name : 'red' Wire : 'R' Name : 'blue' Wire: 'B' Name : 'orange' Name: 'yellow' Wire : 'Y'"
pat = re.compile(r"Name\s*:\s*'(?P<Name>[^']+)'\s+Wire\s*:\s*'(?P<Wire>[^']+)'")
items = [m.groupdict() for m in pat.finditer(txt)]
df = pd.DataFrame(items)
print(df)

输出:

    Name Wire
0 red R
1 blue B
2 yellow Y

关于python - 通过文本行搜索的正确方法,re.findall() 和 re.search() 都不能完全工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57169867/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com