【问题标题】:Prepending string using replaceAll and regex使用 replaceAll 和正则表达式添加字符串
【发布时间】:2011-03-04 01:04:56
【问题描述】:

我不知道如何使用正向前瞻来创建正则表达式。这个想法是在长字符串中的每两个字符前面加上两个字符串。即

"090909" => "XX09XX09XX09"

这段代码:

String s = "090909";
String ns = s.replaceAll("(?=\\d\\d)", "XX");  

...不起作用;输出为XX0XX9XX0XX9XX09。但是这段代码有效:

String s = "090909";
String ns = s.replaceAll("(?=09)", "XX");  

我很困惑如何想出一个表示每两个字符先行的表达式。我错过了一些界限吗?

【问题讨论】:

    标签: java regex lookahead


    【解决方案1】:

    您可以使用以下内容:

    String s = "090909";
    String ns = s.replaceAll("(\\d\\d)", "XX$1");  
    

    () 将创建capture$1 访问捕获。

    【讨论】:

    • +1,但您在正则表达式中缺少(,替换字符串应为"XX$1",而不是"$1XX"
    • 您的代码不起作用。我得到了新的解决方案 s.replaceAll("(?=(\\d\\d)+$)", "XX"),但不幸的是,这只适用于字符串长度为偶数的情况
    • 这行得通! s.replaceAll("(\\d\\d)", "XX$1")。谢谢!不知道 $1 可以用于字符串替换。但非常感谢
    • 其中有一个错误,正如 Alan Moore 所说。我认为您仍然应该考虑使用它,因为您的正则表达式(可能)效率较低(因为前瞻断言)
    • 带有评论发布的竞争条件 ;) 没问题 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多