我有这个需求——对于像下面展示的输入字符串
8This8 is &reallly& a #test# of %repl%acing% %mul%tiple 9matched9 9pairs
我想要去除匹配单词的边界(其中匹配对是8、&或%等字符),结果如下:
This is really a test of repl%acing %mul%tiple matched 9pairs
这个用于成对匹配的字符列表可能会有所变化,例如8、9、%、#等,只有与每种类型开头和结尾相匹配的单词将被剥离这些字符,而嵌入在单词中的相同字符将保持不变。
使用Java,我可以使用模式如“\\b8([^\\s]*)8\\b”和替换为$1,以捕获并替换所有8...8的出现,但是如何为所有类型的成对进行此操作?
我可以提供一个模式,例如“\\b8([^\\s]*)8\\b|\\b9([^\\s]*)9\\b”等,将匹配所有类型的匹配对(*8,9等),但是如何指定“可变”的替换组?
例如,如果匹配是9...9,则替换应为$2。
当然,我可以运行多个这样的程序,每个程序替换特定类型的成对,但我想知道是否有更优雅的方法。
还是有完全不同的方法来解决这个问题吗?
谢谢。
(?<!\S)([89&#%])(\S+)\1(?=\s|$)
。https://regex101.com/r/qB0jV1/19 - Avinash Raj