【发布时间】:2020-03-12 16:44:15
【问题描述】:
我正在尝试制作一个匹配字符串中的缩写及其完整形式的正则表达式。我有一个捕获某些情况的正则表达式,但在下面的示例中,它捕获的单词多于应有的单词。谁能帮我解决这个问题?
x = 'Confirmatory factor analysis (CFA) is a special case of what is known as structural equation modelling (SEM).'
re.findall(r'\b([A-Za-z][a-z]+(?:\s[A-Za-z][a-z]+)+)\s+\(([A-Z][A-Z]*[A-Z]\b\.?)',x)
出来:
[('Confirmatory factor analysis', 'CFA'),
('special case of what is known as structural equation modeling', 'SEM')]
【问题讨论】:
-
它应该匹配什么?匹配缩写的预期标准是什么?
-
我认为将首字母缩写词与其原词联系起来是没有规则的。例如,“受激辐射的光放大”和LASER。它们的长度不同。您应该决定如何将首字母缩略词与其原词联系起来。
-
它必须捕获代表首字母缩写词的每个单词。在我的例子中,第一个是正确的,而第二个已经抓住了更多的词。它应该只匹配结构方程建模。我对正则表达式很陌生
-
使用
(?<=\()[A-Z]+(?=\))可以轻松捕获您的首字母缩写词,因此一旦您这样做了,您只需翻译它们。 -
SEM 可以是“S所谓结构E方程M建模的特殊情况”的首字母缩写。首字母缩略词取决于其定义。我认为问题在于如何找出原始单词。在正则表达式之前。
标签: python regex python-3.x string