【问题标题】:Ruby - how to pull out that is betweet two "points"? [duplicate]红宝石 - 如何拉出两个“点”之间的? [复制]
【发布时间】:2013-05-16 12:13:33
【问题描述】:

我有这样的文字:

...
Sentence one. hsjdhsd jghdsjghjdskhgjksdh kjghdsjkg

sdgsdg
dgds
hfdhdf
h
fdh
dfh Sentence two. gdjshagjhsdga sdgjhsdkjgh adskjghdsa
gs a
gfdgfdhfdhh
...

我需要从这一段中提取字符串之间的文本(实际上是一个句子)句子一。句子二。

各位大侠,能帮帮我吗,怎么拉?

谢谢

【问题讨论】:

  • 你没有包括你目前拥有的东西?
  • 我怀疑您是否能够使用合理的正则表达式区分任意真实句子和胡言乱语。某种简单的解析器可能是你最好的选择。
  • /Sentence one(.*?)Sentence two/m 可以工作,但前提是Sentence oneSentence two 是精确的并且没有嵌套。

标签: ruby regex string substring


【解决方案1】:

看看你有什么,你句子的开头和结尾分别是大写字母和句号。您可以构造一个正则表达式,提取大写字母和之后的第一个句点之间的文本。

但这可能是一个人为的例子;看起来你可能在键盘中间有随机键,所以这可能不是你实际乱码的特征。

【讨论】:

    【解决方案2】:

    试试这样([A-Z]{1}.*\.)?

    【讨论】:

      【解决方案3】:

      使用条件触发器表达式

      鉴于您的语料库如上定义:

      ruby -ne 'puts $_ if /Sentence/ ... /Sentence/' /tmp/corpus
      

      将输出:

      Sentence one. hsjdhsd jghdsjghjdskhgjksdh kjghdsjkg
      
      sdgsdg
      dgds
      hfdhdf
      h
      fdh
      dfh Sentence two. gdjshagjhsdga sdgjhsdkjgh adskjghdsa
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多