我有一段包含缩写词的文本。首字母缩略词都是用连字符写的,我想删除它,最有可能是 s/。诀窍是首字母缩略词可以是可变字母长 A-B、A-B-C、A-B-C-D、A-B-C-D-E。
因此,如果我有一个字符串“欢迎参加 B-A 和 R-C-T-C 之间的美国比赛”,并且我想将其转换为“欢迎参加 BA 和 RCTC 之间的美国比赛”,我该怎么做?像“训练有素”这样的词不应该受到影响。
到目前为止,我有三个 s/首先替换所有四个字母的缩写词,然后是三个,然后是两个。有没有更好的方法用一个 s/表达式来做到这一点?
谢谢!
最佳答案
解决方案如下:
s/-(?=\p{Lu}\b)//g
这意味着:找到一个破折号,后面跟着一个大写字母,这是单词边界。替换为空字符串。
这是一个笑脸友好的版本,破折号左侧有相同的检查:
s/(?<=\b\p{Lu})-(?=\p{Lu}\b)//g
关于regex - Perl:删除较长字符串中的首字母缩略词连字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32150463/