【问题标题】:Find a substring that appears before a word in a string upto a number查找出现在字符串中某个单词之前的子字符串,最多为一个数字
【发布时间】:2019-11-20 19:57:30
【问题描述】:

我有一个字符串:

"abc mysql 23 rufos kanso engineer"

我希望正则表达式在“工程师”一词之前输出字符串,直到它看到一个数字。

这是正则表达式应该输出:

23 rufos kanso

另一个例子:

字符串:

def grusol defno 1635 minos kalopo, ruso engineer okas puno"

我希望正则表达式在“工程师”一词之前输出字符串,直到它看到一个数字。

这是正则表达式应该输出:

1635 minos kalopo, ruso

我可以通过一系列正则表达式来实现这一点。

我可以一次性完成吗?

谢谢

【问题讨论】:

  • 你试过什么,我看不到代码

标签: python regex pandas


【解决方案1】:

我将使用的模式:((\d+)(?!.*\d).*)engineer——它查找最新的数字并从那里开始。

类似于(\d.*)engineer 的东西也可以使用,但前提是字符串中只有一位数字。


>>> import re
>>> string = '123 abc mysql 23 rufos kanso engineer'
>>> pattern = r'((\d+)(?!.*\d).*)engineer'
>>> re.search(pattern, string).group(1)
'23 rufos kanso '
>>>

编辑

如果“工程师”部分后面有数字,则上述模式不起作用,正如您在评论中指出的那样。我试图解决它,但老实说我无法想出一个新模式(对不起)。

我可以建议的解决方法是,假设“工程师”仍然是“关键”词,用所说的词分割你的初始字符串。

这是我的意思的说明:

>>> string = '123 abc mysql 23 rufos kanso engineer 1234 b65 de'
>>> string.split('engineer')
['123 abc mysql 23 rufos kanso ', ' 1234 b65 de']
>>> string.split('engineer')[0] 
'123 abc mysql 23 rufos kanso '

# hence, there would be no unexpected digits

>>> s = string.split('engineer')[0]
>>> pattern = r'((\d+)(?!.*\d).*)'
>>> re.search(pattern, s).group(1)
'23 rufos kanso '

【讨论】:

  • 谢谢。这行得通,但是如果字符串末尾有数字,它就不起作用 Example string = '123 abc mysql 23 rufos kanso Engineer 1234 b65 de'
  • @JerryGeorge,我编辑了最初的答案。我希望这至少在某种程度上有所帮助
【解决方案2】:

看看这个site。使用正则表达式非常棒,它解释了每一个步骤。
这是您的问题的解决方案:link

【讨论】:

    【解决方案3】:

    使用positive look-ahead 匹配,直到单词engineer 前面有一个数字。

    The regex - (?=\d)(.+)(?=engineer)

    只是想了解一下:

    import re
    pattern = r"(?=\d)(.+)(?=engineer)"
    input = [ "\"def grusol defno 1635 minos kalopo, ruso engineer okas puno\"", "\"abc mysql 23 rufos kanso engineer\"" ]
    
    matches = []
    
    for item in input:
        matches.append(re.findall(pattern, item))
    

    输出:

    [['1635 minos kalopo, ruso '], ['23 rufos kanso ']]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-22
      • 1970-01-01
      • 2022-12-15
      • 1970-01-01
      • 2017-12-17
      • 1970-01-01
      相关资源
      最近更新 更多