python - 正则表达式 - 将子字符串与字符串匹配

标签 python regex pandas

我有 2 个数据框,我想要实现的目标是创建匹配的 ID 列表。有了这些信息,我就可以稍后执行合并(合并不是我的问题的一部分,我只是想了解如何正确匹配行)。

DF1

<表类=“s-表”> <标题> ID <正文> 123 123B 234 234B 456 456B asfdh5 45gh

DF2

<表类=“s-表”> <标题> ID <正文> 123456 123B456 BBBER4 234567YT B9234BAA 456XXA32 999GHF pp9985 88AVKVBD

期望结果 - 我想获取匹配的字符串列表

<表类=“s-表”> <标题> 匹配 <正文> 0 123 1 123B 2 NaN 3 234 4 234B 5 456 6 NaN 7 NaN 8 NaN

我当前使用的代码如下

df2['ID'].str.extract(fr"({'|'.join(df1['ID'].values)})", expand=False)

问题是此代码与 DF1 中的 ID 不完全匹配,如果您在上面的所需结果中看到索引 2,结果是123B,但是我我只得到 123。

以下是我使用当前代码得到的结果。

<表类=“s-表”> <标题> 匹配 <正文> 0 123 1 123 2 NaN 3 234 4 234 5 456 6 NaN 7 NaN 8 NaN

任何帮助将不胜感激。感谢您, 西安

最佳答案

您的问题是,当它查找匹配项并返回第一个匹配项时,它会从 DF1 的顶部进行检查。如果按列中字符串的长度对数据帧进行排序,它将返回最长的匹配项。

这应该可以解决您的问题:

# Sort by length of string
new_index = df1.ID.str.len().sort_values().index
df1 = df1.reindex(index = new_index[::-1]).reset_index(drop=True)

# Match strings
df2['ID'].str.extract(fr"({'|'.join(df1['ID'].values)})", expand=False)

关于python - 正则表达式 - 将子字符串与字符串匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70346324/

相关文章:

java - Jmeter - beanshell 中的正则表达式 (matcher()/pattern() ) 正在切割国家字符

regex - Groovy:转义任意(未知)正则表达式

python - 用一组新值替换看起来像列中的元素范围并将其余值设置为 0

python - wait_for_message 可以检查多个内容吗?

python - Python 中是否有类似于 Ruby 的 Rufus-Scheduler 的内存作业调度程序

python - QtDesigner 更改将在重新设计用户界面后丢失

python - 多处理映射引发异常

regex - 用 grep 匹配一行中的两个字符串

python - 如何按多个级别的列过滤多索引数据框?

python - 将 pandas 数据框分组并将多个值收集到集合中