繁体   English   中英

正则表达式突出显示长度超过n个单词的句子

[英]regex to highlight sentences longer than n words

我正在尝试编写一个正则表达式,该表达式可用于识别文档中的长句子。 我的情况是科学手稿。 我的目标是在libre office或任何带有正则表达式搜索的文本编辑器中执行此操作。

到目前为止,我得到以下表达式可在大多数情况下使用:

(\[*\(*[\w|\-|–|−|\/|≥|≤|’|“|”|μ]+\%*\)*\]*,*\:*\s+){24,}?(\[*\(*[\w|\-|–|−|\/|≥|≤|’|“|”|μ]+\%*\)*\]*[\.|?|!|$])

顺便说一句,我从这篇文章中得到启发

它包含:

group1:
(\[*\(*[\w|\-|–|−|\/|≥|≤|’|“|”|μ]+\%*\)*\]*,*\:*\s+)


a repetition element (stating how many words n - 1):
{24,}?

group2:
(\[*\(*[\w|\-|–|−|\/|≥|≤|’|“|”|μ]+\%*\)*\]*[\.|?|!|$])

基本功能是:group1匹配任意数量的单词字符或文本中存在的其他字符,后跟一个或多个空格。group1必须重复24次(或您想要的句子长度尽可能多),group2匹配任何字符文字中出现的文字字符数或其他字符数,后跟句号,感叹号,问号或段落分隔符。

满足以上所有条件的任何字符串都将突出显示。

到目前为止,我无法解决的问题是,当文本中出现点而不是句号时,使它起作用。 诸如:例如,et al。,Fig。,1.89等。同样,我也不喜欢必须手动调整它才能处理包含非单词字符的句子,例如[[ (%-#µ“'等。每次遇到其他不常见的字符时,我都必须扩展该表达式。

我很乐意为解决此问题提供任何帮助或建议。

使用正则表达式swiss-army-knife可以做很多事情,但是您遇到的问题接近正则表达式的极限。 您想要检测的某些事物可能只需很小的改动就可以处理,而其他一些则很难。 如果您的目标是要使用某种工具来准确测量每种可能的字符突变的句子长度,则可能需要在LibreOffice之外使用专用的自定义软件或第三方工具。

但是,也就是说,如果您想避免编程或使用其他工具,则可以通过一些技巧来侵入现有的正则表达式以使其更好地工作。 让我们看一些可能对您有用的技术:

  • 您可以通过将它们直接包含在内来调整一些特殊情况的正则表达式,例如Fig.Mr. .。 当前您具有[\\w|\\-|–|−|\\/|≥|≤|'|“|”|μ]+ ,基本上是[\\w]+ ,带有一堆其他“特殊”字符,您可以使用类似([\\w|...]+|Mr\\.|Mrs\\.|Miss\\.|Fig\\.) (当然,请用我写过...所有特殊字符代替)。 正则表达式是“贪婪的”算法,将尝试消耗尽可能多的文本,因此,通过直接包含特殊的“点词”,您可以使正则表达式“跳过”文本中有问题的某些句点字符。 确保要添加“要跳过的时间段”时,请始终在其前加反斜杠,例如i\\.e\\. ,因此它不会被当作特殊的“任何”字符。

  • 一个类似的技巧可以通过假设数字后跟一个句点再加上更多数字来更好地捕获数字: ([\\w|...]+|\\d+\\.\\d+|...)但这并不能解决所有问题,如果您的文档作者在句子中间写的东西是0. ,那么您会遇到一个难题,但它至少可以正确处理pie

  • 另外,现在,您的正则表达式会消耗字符,直到到达任何终止标点字符-a为止. ! ? ,或文档末尾。 这对于像一个问题ie,3.14 ,因为只要你的正则表达式而言,这句话停在. 可以要求您的正则表达式仅在到达._停止句子-句号后加一个空格。 那样并不能解决Mr.这样的单词的不匹配问题,但是它将像3.14这样的“单词”视为一个单词而不是句子的结尾,这比您当前的位置更近。 为此,您必须在“单词”正则表达式中包含一个奇数序列,例如(\\.[^ ]) ,它表示单词中包含“点后跟非空格”。 然后必须将终止顺序更改为(\\. |!|?|$) 重复类似的更改! ?

  • 另一个有用的技巧是利用字符代码范围,而不是直接对每个特殊字符进行编码。 现在,通过拼写出宇宙中每个重音符号,有向字母和变音符号,您都很难做到。 相反,您可以说所有 “特殊字符”都被认为是“单词”的一部分:而不是[\\w|\\-|–|−|\\/|≥|≤|'|“|”|μ]+ ,编写[\\w|\\-|\\/|\€-\￿] ,它将捕获除表情符号以外的每个字符,以及从真正晦涩的死语中捕获的几个字符。 LibreOffice 似乎支持Unicode,因此使用\\uXXXX模式应该可以在[字符范围]

这可能足以使您的正则表达式在LibreOffice中可以接受,甚至可能足以回答您的问题。 但是,如果您确实打算进行这样的更复杂的文档分析,则最好将文档导出为纯文本,然后在其上运行专用工具。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM