当它被 (a-z) 包围时,从字符串中删除破折号,但不从中间删除破折号
Remove dash from string but not from middle when its surrounded by (a-z)
我读过类似的问题,但这些问题并没有完全回答我的问题。
我想从我的字符串中删除任何破折号,但不想像我的示例测试用例那样删除字符串中间被 (a-z) 或 (A-Z) 包围的破折号。
我已经使用了这个正则表达式代码,但它清除了所有破折号:
string.replaceAll("\-", "");
测试用例
- --好
- -好
- g-ood*
- g--ood
- 好-
- 很好--
结果
- 很好
- 很好
- g-ood*
- 很好
- 很好
- 很好
使用正则表达式来做到这一点是正确的做法。但是,您的正则表达式正在捕获 every 个连字符。你需要的是检查前后的字母。
((?<!\w)-|-(?!\w))
此正则表达式将查找 之前没有的连字符或后面没有任何内容的 连字符并替换它们。
使用这个正则表达式,您可以像以前一样用任何东西替换那些出现的地方。
string.replaceAll("((?<!\w)-|-(?!\w))", "");
我读过类似的问题,但这些问题并没有完全回答我的问题。
我想从我的字符串中删除任何破折号,但不想像我的示例测试用例那样删除字符串中间被 (a-z) 或 (A-Z) 包围的破折号。
我已经使用了这个正则表达式代码,但它清除了所有破折号:
string.replaceAll("\-", "");
测试用例
- --好
- -好
- g-ood*
- g--ood
- 好-
- 很好--
结果
- 很好
- 很好
- g-ood*
- 很好
- 很好
- 很好
使用正则表达式来做到这一点是正确的做法。但是,您的正则表达式正在捕获 every 个连字符。你需要的是检查前后的字母。
((?<!\w)-|-(?!\w))
此正则表达式将查找 之前没有的连字符或后面没有任何内容的 连字符并替换它们。
使用这个正则表达式,您可以像以前一样用任何东西替换那些出现的地方。
string.replaceAll("((?<!\w)-|-(?!\w))", "");