基于熊猫/正则表达式的方法来匹配字符串列表中的第一个字符串

很抱歉,如果这是交叉列出的;我搜索了一段时间!

我正在处理Pandas中一些非常大,非常混乱的数据。感兴趣的变量是一个字符串,包含一个或多个带有(不带有)典型业务后缀的业务名称实例(例如,LLC,LP,LTD)。例如,我可能有“ ABC LLC XYZ,LLC XYZ,LTD”。我的目标是从列表中找到匹配的后缀的第一个实例。我还需要提取一切直到第一场比赛。对于上面的示例,我将查找/提取“ ABC LLC”。考虑以下数据:

 sfx = ['LLC','LP','LTD']
 dat = pd.DataFrame({'name':['ABC LLC XYZ,LLC XYZ, LTD','IJK LP, ADDRESS']})

到目前为止,我已经以一种对我不起作用的复杂方式完成了一个案例:

one_string = 'ABC LLC XYZ,LLC XYZ, LTD'
indexes=[]
keywords=dict()
for sf in sfx:
    indexes.append(one_string.index(sf,0))
    keywords[one_string.index(sf,0)]=sf
    indexes.sort()
    print(one_string[0:indexes[0]]+ keywords[indexes[0]])

我正在寻找一种用于整个列的更有效(可能是矢量化)的方法。另外,当文本中恰好出现相同的字母组合时,我需要合并正则表达式,以避免提取后缀。我需要匹配的正则表达式模式可能看起来像这样(LLC出现在空格或逗号之后,并且在单词的结尾):

reg_pattern = r`(?<=[\s\,])LLC\b|(?<=[\s\,])LP\b|(?<=[\s\,])LTD\b`

更新

Wiktor的简单解决方案。我还意识到,一旦提取出后缀之前的内容,就需要分别提取其后的所有内容。将解决方案投入积极的眼光是行不通的。非常感谢!

维克多·史翠比维

要获取关键字之前和包含的文本,可以使用

pattern = r"^(.*?\b(?:{}))(?!\w)".format("|".join(map(re.escape, names)))

接着

df['results'] = df['texts'].str.extract(pat, expand=False)

调整列名称以匹配您的代码。该模式将看起来像^(.*?\b(?:LLC|LP|LTD))(?!\w)并且将意味着:

  • ^ -字符串开始
  • (.*?\b(?:LLC|LP|LTD))-第1组(此值将由返回.str.extract):
    • .*? -除换行符以外的任何0+字符,请尽可能少
    • \b -单词边界
    • (?:LLC|LP|LTD)-备选之一:LLCLPLTD
  • (?!\w)-后面没有单词char:字母,数字或_

要获得比赛后的所有文字,您可以使用

pattern = r"\b(?:{})(?!\w)(.*)".format("|".join(map(re.escape, names)))

在这里,模式看起来像\b(?:LLC|LP|LTD))(?!\w)(.*),它首先将一个名称作为一个整体匹配,然后将其余的所有行都捕获到组1中(匹配(.*)-除换行符以外的任何0个或多个字符)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

正则表达式,从字符串末尾到右边的第一个字符(点)匹配char('-')

来自分类Dev

在两个字符串(包括第一个字符串)之间匹配的正则表达式

来自分类Dev

正则表达式匹配不包括第一个字符的字符串

来自分类Dev

正则表达式查找字符串中的第一个字母

来自分类Dev

忽略正则表达式匹配中的第一个字符

来自分类Dev

正则表达式-回显字符串的第一个字符

来自分类Dev

Javascript正则表达式忽略匹配中的第一个字符

来自分类Dev

正则表达式,用于检查字符串中的第一个字母

来自分类Dev

Powershell正则表达式匹配第一个字符串以外的字符串

来自分类Dev

正则表达式仅检查字符串C#中的第一个字符

来自分类Dev

正则表达式替换特定匹配项的字符串的第一个和最后一个字符

来自分类Dev

根据字符串中的第一个字符,找到字符串列表中元素的第一个匹配项

来自分类Dev

正则表达式删除与第一个字符串匹配的行?

来自分类Dev

如何匹配正则表达式中的第一个字符串,然后在正则表达式中运行另一个递归模式?

来自分类Dev

使用正则表达式VB NET匹配并替换字符串中的第一个和最后一个字符以及子字符串

来自分类Dev

匹配正则表达式中的第一个字符?

来自分类Dev

正则表达式PCRE:验证字符串以匹配第一个字符串集而不是最后一个字符串

来自分类Dev

正则表达式查找字符串中的第一个字母

来自分类Dev

正则表达式匹配字符串的第一个和最后一个字符,但是为什么呢?

来自分类Dev

合并2个正则表达式-获取带连字符的字符串的第一个字符

来自分类Dev

正则表达式仅检查字符串C#中的第一个字符

来自分类Dev

正则表达式替换特定匹配项的字符串的第一个和最后一个字符

来自分类Dev

C#:如果某些字符是使用正则表达式的字符串的第一个字符,则替换它们

来自分类Dev

根据字符串中的第一个字符,找到字符串列表中元素的第一个匹配项

来自分类Dev

正则表达式删除与第一个字符串匹配的行?

来自分类Dev

C#正则表达式,匹配但不包括匹配字符串之前的第一个字符

来自分类Dev

两个字符串之间的 JavaScript 正则表达式而不捕获第一个字符串

来自分类Dev

R:从第一个字符到字符串末尾的正则表达式

来自分类Dev

正则表达式匹配字符串中的最后一个字符 - C#

Related 相关文章

  1. 1

    正则表达式,从字符串末尾到右边的第一个字符(点)匹配char('-')

  2. 2

    在两个字符串(包括第一个字符串)之间匹配的正则表达式

  3. 3

    正则表达式匹配不包括第一个字符的字符串

  4. 4

    正则表达式查找字符串中的第一个字母

  5. 5

    忽略正则表达式匹配中的第一个字符

  6. 6

    正则表达式-回显字符串的第一个字符

  7. 7

    Javascript正则表达式忽略匹配中的第一个字符

  8. 8

    正则表达式,用于检查字符串中的第一个字母

  9. 9

    Powershell正则表达式匹配第一个字符串以外的字符串

  10. 10

    正则表达式仅检查字符串C#中的第一个字符

  11. 11

    正则表达式替换特定匹配项的字符串的第一个和最后一个字符

  12. 12

    根据字符串中的第一个字符,找到字符串列表中元素的第一个匹配项

  13. 13

    正则表达式删除与第一个字符串匹配的行?

  14. 14

    如何匹配正则表达式中的第一个字符串,然后在正则表达式中运行另一个递归模式?

  15. 15

    使用正则表达式VB NET匹配并替换字符串中的第一个和最后一个字符以及子字符串

  16. 16

    匹配正则表达式中的第一个字符?

  17. 17

    正则表达式PCRE:验证字符串以匹配第一个字符串集而不是最后一个字符串

  18. 18

    正则表达式查找字符串中的第一个字母

  19. 19

    正则表达式匹配字符串的第一个和最后一个字符,但是为什么呢?

  20. 20

    合并2个正则表达式-获取带连字符的字符串的第一个字符

  21. 21

    正则表达式仅检查字符串C#中的第一个字符

  22. 22

    正则表达式替换特定匹配项的字符串的第一个和最后一个字符

  23. 23

    C#:如果某些字符是使用正则表达式的字符串的第一个字符,则替换它们

  24. 24

    根据字符串中的第一个字符,找到字符串列表中元素的第一个匹配项

  25. 25

    正则表达式删除与第一个字符串匹配的行?

  26. 26

    C#正则表达式,匹配但不包括匹配字符串之前的第一个字符

  27. 27

    两个字符串之间的 JavaScript 正则表达式而不捕获第一个字符串

  28. 28

    R:从第一个字符到字符串末尾的正则表达式

  29. 29

    正则表达式匹配字符串中的最后一个字符 - C#

热门标签

归档