【发布时间】:2014-04-16 16:28:54
【问题描述】:
我需要一个正则表达式来查找首字母缩写词及其定义。 我尝试匹配大写英文字母的序列,然后是以这些字母开头的单词。例如:
欧盟欧盟
我需要匹配以下“语法”:
<Capital letters> <Tabs or spaces>
<Optional "(">
<Optional tabs or spaces> <Matching definition words> <Optional tabs or spaces>
<Optional ")">
以下命令在当前目录中的所有文件中查找所有首字母缩写词(不短于 2 个字母):
grep -aRoP '([A-Z])([A-Z])([A-Z])?([A-Z])?([A-Z])?([A-Z])?[ \t]+\(?[ \t]*\1[a-z]* \2[a-z]*(?(3) \3[a-z]*)(?(4) \4[a-z]*)(?(5) \5[a-z]*)(?(6) \6[a-z]*)[ \t]*\)?' .
但它对首字母缩写词的长度有限制(最多 6 个字符)。 是否可以以更紧凑的方式重写正则表达式,消除对首字母缩写词长度的限制?可能这可以通过递归模式来完成。
【问题讨论】:
-
不能将
[A-Z]{1,6}用于 1 到 6 大写吗?还是[A-Z]+表示 1 或无限大写? -
没有。我需要获取其定义后跟的首字母缩略词。我不需要首字母缩写词本身(没有它们的含义)。我需要一个正则表达式来查找首字母缩写词及其定义。正则表达式必须匹配“EU European Union”而不是“EU”或“EU Blah-Blah”。
-
我不会为此使用正则表达式,只需使用循环来检查每个大写字母,然后根据每个单词检查它们(您可以轻松地将其作为匹配的
[A-Z]\w+字符串的其余部分)使用正确的工具来完成这项工作。正则表达式很棒,但并非适用于一切。 -
我的正则表达式运行良好。但我很好奇,能否以递归或平衡组的方式进行改进。