【问题标题】:Regular expression to extract whole sentences with matching word正则表达式提取匹配单词的整个句子
【发布时间】:2014-11-22 18:41:30
【问题描述】:

我想在整个文本中提取带有“flung”一词的句子。

例如,在下面的文本中,我想提取句子“就像一只手把它们抓在中间,然后把它们扔到一边。”使用正则表达式。

我尝试使用这个.*? flung (?<sub>.*?)\.,但它从行首开始搜索。

我该如何解决这个问题?

就在她这样做的时候,一件最不寻常的事情发生了。床单聚拢在一起,猛地一跃而起,变成了一个峰顶,然后一头扎进了底部的栏杆上。就好像一只手把它们抓在中间,把它们扔到一边。紧接着,…………

【问题讨论】:

  • 上述输入的预期输出是什么?
  • 预期的输出是“就像一只手把它们抓在中间,然后把它们扔到一边。”。而且您的代码运行良好。谢谢阿维纳什!
  • 如果你通过一个句子分析器预处理你的文本,将每个句子分成单独的行,这部分变得很容易,你的句子确定逻辑不再需要适合单个正则表达式。
  • 你的正则表达式引擎/语言/实现是什么?
  • @Unihedron 我使用 Emeditor。不同的正则表达式引擎使用不同的正则表达式,我总是对此感到困惑。

标签: regex


【解决方案1】:

给你,

[^.]* flung [^.]*\.

DEMO

[^.?!]*(?<=[.?\s!])flung(?=[\s.?!])[^.?!]*[.?!]

DEMO

【讨论】:

  • 感谢 Avinash,您拯救了这一天。从技术上讲,OP 要求输入“flung”(无空格)这个词,应该是:[^.]*flung[^.]*\.
  • 如果一个句子中有两个相同的单词,是否可以在单词周围获得两个句子的副本?
  • 您能建议一个正则表达式来正确提取包含小数的句子吗? ('.' 不应被视为 '5.25ml' 中的句号)
  • \b\d+\.\d+\b 试试这个
【解决方案2】:

点之间的任何东西:

无情

[A-Za-z," ]+word[A-Za-z," ]+

一脸宠爱

[A-Za-z," ]+word[A-Za-z," ]+\.

【讨论】:

  • ... 除非您的文本包含标点符号缩写,即。这个遥远的例子。
  • @tripleee 你是对的。如何用“-”连接匹配词来解决这个问题?谢谢!
  • \&lt;flung\&gt; 将匹配连字符旁边,以及句号旁边,即句尾。
【解决方案3】:
"[A-Z]\\s?\\w*\\s?(([^(\\.\\s)|(\\?\\s)|(!\\s)])|\\s)*(?:your target\\s)(([^(\\.\\s)|(\\?\\s)|(!\\s)])|\\s)*(([^(\\.\\s)|(\\?\\s)|(!\\s)])|\\s)*[\\.|\\?|!]"

句子以任何大写字母开头,中间可以包含小数或缩写。

【讨论】:

  • 这个在R里
  • 欢迎提供直接解决方案,但请确保在其周围添加上下文,以便您的其他用户了解它是如何解决问题的
  • 能否请您解释一下?
【解决方案4】:
(?<=^|\s)[A-Z][^!?.]*( word\s*)[^!?.]*(?=\.|\!|\?)

在第一个大写字母之前有一个行开头或一个空格,那么它可能包含任何没有设置[!?.](*)-或可能没有的字符,然后包含你的目标单词,后面有或没有空格(如果它在句尾),然后可以再次包含任何不包含[!?.](*)-或非集合的字符,最后以点或!?结尾。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-15
    • 2012-01-06
    • 2011-08-07
    • 2017-07-08
    相关资源
    最近更新 更多