首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >查找出现在字符串中单词之前直至数字的子字符串

查找出现在字符串中单词之前直至数字的子字符串
EN

Stack Overflow用户
提问于 2019-07-11 15:04:52
回答 3查看 74关注 0票数 -3

我有一个字符串:

代码语言:javascript
复制
"abc mysql 23 rufos kanso engineer"

我希望正则表达式输出单词"engineer“之前的字符串,直到它看到一个数字。

也就是说,regex应该输出:

代码语言:javascript
复制
23 rufos kanso

另一个例子:

字符串:

代码语言:javascript
复制
def grusol defno 1635 minos kalopo, ruso engineer okas puno"

我希望正则表达式输出单词"engineer“之前的字符串,直到它看到一个数字。

也就是说,regex应该输出:

代码语言:javascript
复制
1635 minos kalopo, ruso

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

我能一次完成这件事吗?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-07-11 15:16:03

我使用的模式是:((\d+)(?!.*\d).*)engineer --它查找最新的数字,然后从那里开始。

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

代码语言:javascript
复制
>>> 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‘部分后面有数字,则上面提到的模式不起作用,正如您在注释中指出的那样。我试图解决这个问题,但老实说,我想不出一个新的模式(对不起)。

我可以建议的解决方法是,假设'engineer‘仍然是'key’这个词,用这个词拆分你的初始字符串。

下面是我的意思的说明:

代码语言:javascript
复制
>>> 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 '
票数 0
EN

Stack Overflow用户

发布于 2019-07-11 15:18:27

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

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

只是为了得到一个想法:

代码语言:javascript
复制
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))

输出:

代码语言:javascript
复制
[['1635 minos kalopo, ruso '], ['23 rufos kanso ']]
票数 0
EN

Stack Overflow用户

发布于 2019-07-11 15:18:49

看看这个site。使用正则表达式是很棒的,它解释了每个步骤。

以下是您的问题的解决方案:link

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56983420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档