【问题标题】:Adding characters conditionally to a regular expression match有条件地向正则表达式匹配添加字符
【发布时间】:2013-04-17 08:21:56
【问题描述】:

我在 Eclipse 中使用正则表达式,想知道是否有办法根据匹配项添加字符。

我正在使用这些表达式来匹配和替换:

Match: ^(\s*)(//)?(.*?)"([\p{Punct}\p{Space}]*)?(\p{Alnum}.*?\p{Alnum})([\p{Punct}\p{Space}]*)?"(.*?)$
Replace: $1$3"$4" \+ i18n.tr\("$5"\) \+ "$6"$7

例如

System.err.println("Unexpected number of guests: ");

我正在尝试用

替换它
System.err.println(i18n.tr("Unexpected number of guests") + ": ");

但我得到了

System.err.println("" + i18n.tr("Unexpected number of guests") + ": ");

如果没有捕获任何内容,有什么办法可以去掉 i18n.tr(.*) 前面的 "" +?

【问题讨论】:

    标签: java regex eclipse


    【解决方案1】:

    你不能用一个搜索替换来做到这一点!

    唯一的办法就是使用两个search-replace:

    • 第一个带点空格的

    Match: ^(\s*)(//)?(.*?)"([\p{Punct}\p{Space}]++)(\p{Alnum}.*?\p{Alnum})([\p{Punct}\p{Space}]*)?"(.*?)$

    Replace: $1$3"$4" \+ i18n.tr\("$5"\) \+ "$6"$7

    • 第二个没有点空格

    Match: ^(\s*)(//)?(.*?)"(\p{Alnum}.*?\p{Alnum})([\p{Punct}\p{Space}]*)?"(.*?)$

    Replace: $1$3i18n.tr\("$4"\) \+ "$5"$6

    在尝试之前不要忘记进行备份

    【讨论】:

    • 啊,太好了,谢谢。我最终在第二次通过时使用 ( \+ ""|"" \+ ) 替换为空白。有点努力,但除了我创建的语句之外,我没有太多匹配的语句。
    猜你喜欢
    • 2012-07-15
    • 2022-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 2017-12-23
    相关资源
    最近更新 更多