Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 数据帧内的正则表达式-查找字符之间的最小长度_Python_Regex_Pandas_String_Substring - Fatal编程技术网

Python 数据帧内的正则表达式-查找字符之间的最小长度

Python 数据帧内的正则表达式-查找字符之间的最小长度,python,regex,pandas,string,substring,Python,Regex,Pandas,String,Substring,编辑:更新再现性 我目前正在Pandas数据帧中工作,在列[column a]的每一行中都有一个字符串列表。我试图提取关键字列表(列表B)的任何子列表组合之间的最小距离 而Dataframe列中的每一行都包含字符串列表 将熊猫作为pd导入 将numpy作为np导入 data=pd.DataFrame(np.array(['1','2',['abc def ghi jkl'待搜索的随机字符串,'abc def ghi jkl'待搜索的随机字符串,'abc待搜索的随机字符串,'def']), ['4

编辑:更新再现性

我目前正在Pandas数据帧中工作,在列[column a]的每一行中都有一个字符串列表。我试图提取关键字列表(列表B)的任何子列表组合之间的最小距离

而Dataframe列中的每一行都包含字符串列表

将熊猫作为pd导入
将numpy作为np导入
data=pd.DataFrame(np.array(['1','2',['abc def ghi jkl'待搜索的随机字符串,'abc def ghi jkl'待搜索的随机字符串,'abc待搜索的随机字符串,'def']),
['4','5',['ghi jkl'待搜索的随机字符串','ghi jkl'待搜索的随机字符串','mno待搜索的随机字符串'],
['7','8',['abc待搜索随机字符串定义','mno pqr待搜索随机字符串','random string待搜索']],
列=['a','b','list_of_strings_to_search'])
在高层,我试图搜索
数据['list\u of_strings\u to_search']
中包含的列表中的每个字符串,查找
ListB
元素的任何子列表组合(必须同时满足这两个条件),并返回满足条件的
ListB
子列表,从中我可以计算距离(以文字表示)在每个子列表元素对之间

将熊猫作为pd导入
将numpy作为np导入
进口稀土
def查找单词之间的距离(文本、单词列表):
''此功能尚未按预期工作''
关键字列表=[]
#遍历列表B中的所有子列表:
对于word_列表中的i:
#遍历dataframe列中列表中的所有字符串:
对于文本中的字符串:
#确定要搜索的两个单词(遍历单词列表)
字1,字2=i[0],i[1]
#使用正则表达式查找两个单词:
p=re.compile('.'?'.join((word1,word2)))
迭代器=p.finditer(字符串)
#对于每个匹配项,附加字符串:
对于迭代器中的匹配:
关键字\u list.append(match.group())
返回关键字列表
数据['try']=data['list_of_strings_to_search'].应用(查找单词之间的距离,单词列表=ListB)
预期产出:

0    [abc def, ghi jkl, abc random string to be searched def]
1     [ghi jkl, mno random string to be searched pqr]
2    [abc random string to be searched def, mno pqr]
电流输出:

0    [abc def, abc random string to be searched def]
1                                                 []
2             [abc random string to be searched def]
但是,通过手动检查字符串和输出,大多数正则表达式组合不会从下面的语句中返回,我需要每个字符串中包含的所有组合:

迭代器中匹配的
:
关键字\u list.append(match.group())
我打算返回每个字符串中存在的所有子列表组合(因此通过子列表候选值列表进行迭代),以便评估元素之间的最小距离


非常感谢您的帮助

让我们遍历列表理解中的
列表字符串列表列中的每个列表,然后对列表中的每个字符串使用正则表达式模式,以查找指定关键字之间最小长度的子字符串:

import re

pat = '|'.join(fr'{x}.*?{y}' for x, y in ListB)
data['result'] = [np.hstack([re.findall(pat, s) for s in l]) for l in data['list_of_strings_to_search']]
结果:

0    [abc def, ghi jkl, abc random string to be searched def]
1             [ghi jkl, mno random string to be searched pqr]
2             [abc random string to be searched def, mno pqr]
Name: result, dtype: object

你能解释一下你是如何在预期输出中搜索到
def随机字符串lmn
的吗?我已经根据示例列表B更新了预期输出-谢谢。谢谢Shubham,这是一种比我尝试的嵌套循环更有效的方法@DJW001很高兴我能帮忙:)
0    [abc def, ghi jkl, abc random string to be searched def]
1             [ghi jkl, mno random string to be searched pqr]
2             [abc random string to be searched def, mno pqr]
Name: result, dtype: object