【发布时间】:2018-09-21 05:14:24
【问题描述】:
我有以下正则表达式,它将捕获前 N 个单词并在下一个句号、感叹号或问号处结束。我需要获取单词数量不同但我想要完整句子的文本块。
regex = (?:\w+[.?!]?\s+){10}(?:\w+,?\s+)*?\w+[.?!]
它适用于以下文本:
仅从虾壳中提取稻草和壳聚糖 占 2、4、6、8 和 10% 发现提取物秸秆 8% 是 对抑制藻类 Microcystis spp 的生长非常有效。 细胞数量和叶绿素 a 的量在过程中减少 治疗。两个值都连续下降,直到试验结束。
https://regex101.com/r/ardIQ7/5
但它不适用于以下文本:
仅从虾壳中提取的稻草和壳聚糖就占了 对于 2、4、6、8 和 10% 的人发现,8.2% 的提取物秸秆高度 有效抑制藻类微囊藻属的生长。这 细胞数量和叶绿素 a 的量在 治疗。两个值都连续下降,直到试验结束。
这是因为数字 (8.2%) 带有小数和 %。
我一直在试图弄清楚如何捕捉这些物品,但需要一些帮助来为我指明正确的方向。我不只是想捕捉第一句话。我想捕获 N 个可能包含多个句子的单词并返回完整的句子。
【问题讨论】:
-
试试
[\s\S]*?(?=\. |!|\?) -
我会稍微改变一下@ran_0315,
[\s\S]*?(?=\.\s|!|\?) -
你需要写信,
regex = /(?:\w+[.?!]?\s+){10}(?:\w+,?\s+)*?\w+[.?!]/。我在您的earlier question 中指出,当字符串包含 10 个单词且最后一个单词后跟标点符号时,此正则表达式不起作用:"a1 a2 a3 a4 a5 a6 a7 a8 a9 a10."[regex] #=> nil。