我有一个字符串:
"abc mysql 23 rufos kanso engineer"
我希望正则表达式在“ engineer”一词之前输出字符串,直到看到数字为止。
这是正则表达式应该输出:
23 rufos kanso
另一个例子:
字符串:
def grusol defno 1635 minos kalopo, ruso engineer okas puno"
我希望正则表达式在“ engineer”一词之前输出字符串,直到看到数字为止。
这是正则表达式应该输出:
1635 minos kalopo, ruso
我可以通过一系列正则表达式来实现。
我可以一次完成吗?
谢谢
答案 0 :(得分:0)
我将使用的模式:((\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 '
>>>
如果“工程师”部分后面有数字,则上述模式无效,正如您在注释中指出的那样。我试图解决它,但老实说我无法提出一种新的模式(对不起)。
我建议的解决方法是,假设'engineer'仍然是'key'单词,然后用所说的单词拆分初始字符串。
以下是我的意思的说明:
>>> 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 '
答案 1 :(得分:0)
使用positive look-ahead
进行匹配,直到单词工程师前面有一个数字为止。
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 ']]
答案 2 :(得分:0)