regex - Perl:删除较长字符串中的首字母缩略词连字符

标签 regex perl

我有一段包含缩写词的文本。首字母缩略词都是用连字符写的,我想删除它,最有可能是 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

Demo

这意味着:找到一个破折号,后面跟着一个大写字母,这是单词边界。替换为空字符串。

这是一个笑脸友好的版本,破折号左侧有相同的检查:

s/(?<=\b\p{Lu})-(?=\p{Lu}\b)//g

Demo

关于regex - Perl:删除较长字符串中的首字母缩略词连字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32150463/

相关文章:

javascript - 解析 CSS 背景图像

regex - 查找两个可选标记之间的子字符串

python - 从标准输出获取时间戳后的行

段落的正则表达式匹配

perl - yada-yada 运算符是否已被弃用?

perl open() 总是返回 sh 的 PID 而不是底层程序

java - 计算文件中特定字符串的出现次数

windows - 如何使用 Perl 或任何其他语言找到 Windows x86-32 位上的确切物理内存量?

mysql - 我想在我的 mysql 查询中自动添加单引号

android - 使用 adb 和 perl 捕获 android 设备屏幕截图