正则表达式替换输出中的条件空格



我有一个音乐标题列表,我想从现场曲目中提取事件和 - 如果存在 - 年份。输出的格式必须为eventspaceyear或仅event。您可以使用正则表达式匹配非常轻松地执行此操作,计算组,并在必要时添加空格。但是你也可以用一个简单的替代品来做到这一点吗?

myResult=Regex.replace(myTitle,".*(event1|event2|event3)D*(d+)?.*", "$1 $2" ,RegexOptions.IgnoreCase)

这有效,但是当没有年份时,空间是多余的。就像我说的,有很多方法可以以不同的方式做到这一点,但我想知道您是否可以通过单个正则表达式替换来做到这一点。请注意,输入字符串可能具有年份编号,但没有前导空格。

如果组 2 中的数字之前始终至少有一个空格,则可以将模式编写为:

.*(event1|event2|event3)(?:D*?(sd+))?

并替换为$1$2如果组 2 为空,这也将防止空白空间。

正则表达式演示

或者在替换中使用$1 $2如果以下没有更多数字:

.*(event1|event2|event3)D*?(d*)D*$

正则表达式演示

最新更新