首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >子字符串出现时匹配正则表达式

子字符串出现时匹配正则表达式
EN

Stack Overflow用户
提问于 2021-05-20 19:20:11
回答 1查看 33关注 0票数 2

如果存在子字符串,我想使用正则表达式来匹配数字,但不匹配子字符串。因此,

代码语言:javascript
复制
2-4 foo
foo 4-6
bar 8

应匹配

代码语言:javascript
复制
2, 4
4, 6

我目前有

代码语言:javascript
复制
(\d{0,}\.?\d{1,})

返回数字(整型或浮点型)。使用

代码语言:javascript
复制
(\d{0,}\.?\d{1,}(?=\sfoo))

仅匹配4,而不匹配24。我还尝试了一个先行

代码语言:javascript
复制
^(?=.*?\bfoo\b)(\d{0,}\.?\d{1,})

但这只与2匹配。

*编辑的打字错误

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-20 20:05:08

使用支持无限宽度后视模式的引擎,您可以使用

代码语言:javascript
复制
(?<=\bfoo\b.*)\d*\.?\d+|\d*\.?\d+(?=.*?\bfoo\b)

参见this regex demo。它匹配任何零个或多个数字,后面跟着一个可选的点,然后是一个或多个数字,如果前面有一个完整的单词foo (不一定要立即),或者后面跟着右边的某个地方的foo整个单词。

当您可以访问代码时,只需检查文本中的单词存在,然后提取所有匹配的匹配项。在Python中,您可以使用

代码语言:javascript
复制
if 'foo' in text:
    print(re.findall(r'\d*\.?\d+', text))
# Or, if you need to make sure the foo is a whole word:
if re.search(r'\bfoo\b', text):
    print(re.findall(r'\d*\.?\d+', text))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67619349

复制
相关文章

相似问题

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