首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何找到number+word组合在特定字符串之后的第一次出现?

如何找到number+word组合在特定字符串之后的第一次出现?
EN

Stack Overflow用户
提问于 2021-08-05 09:06:19
回答 2查看 35关注 0票数 0

我有一个字符串,它本质上是一页文本的价值。

一个样本将是:“最终,饼干耳蜡12和阅读时间:最多15分钟”。

我想要提取的是在子字符串“阅读时间”之后第一次出现‘2位数字+分钟’。我的字符串要大得多,到处都有一些数字,所以我想用regex来做这件事,但是我不知道如何从这里开始。

示例:

输入:“最终,饼干耳垢12和阅读时间:最多15分钟”

产出:"15分钟“

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-05 09:27:28

这是一句话:

print(s[s.find("Reading Time") + s[s.find("Reading Time") : len(s)].find("minutes") - 3 : s.find("Reading Time") + s[s.find("Reading Time") : len(s)].find("minutes") + 7])

票数 1
EN

Stack Overflow用户

发布于 2021-08-05 09:22:28

这与regex有点不同,但是为什么不利用更强大的自然语言处理Python库来实现这一点呢?

下面是spaCy的Matcher的一个例子(如果您接受额外的依赖,那么https://spacy.io/usage/rule-based-matching应该比regex更灵活和易于使用):

代码语言:javascript
运行
复制
import spacy
from spacy.matcher import Matcher

nlp = spacy.load("en_core_web_sm")
matcher = Matcher(nlp.vocab)

pattern = [{"LOWER": "reading"}, # we require 'reading time' to be in the pattern
           {"LOWER": "time"},
           {"OP": "*"}, # there may be some stuff (optionally)
           {"LIKE_NUM": True}, # then we look for a number and 'minutes'
           {"LOWER": "minutes"}]

matcher.add("duration", [pattern])

# some tests, and just two of them should give in output something
tests = ["Ultimately, biscuits earwax 12 as well as Reading Time: up to 15 minutes",
         "I wonder if this will take a reading time of more than 15 or 17 minutes in the end",
         "Will it take us more than 50 minutes?",
         "I don't have anything like 'reading time'",
         "spaCy rocks!"]

# print results for each example
for test in tests:
  doc = nlp(test)
  matches = matcher(doc)
  for match_id, start, end in matches:
    print(doc[end-2:end]) # just get the final two tokens

通过调整pattern,你应该能够根据你的需要来匹配句子。

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

https://stackoverflow.com/questions/68663630

复制
相关文章

相似问题

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