字符串正则表达式java

时间:2014-12-01 10:56:35

标签: java regex string

我正在研究一个我满足这个要求的实用程序:

  1. 有一个字符串,其中包含 - @ p1或@ p2或@pn等参数,其中n可以是任意数字。
  2. 例如string是:

    输入:

    它提供@ p1最新消息,来自印度的@ p2和全球@ p3的视频。获取@ p5 Business,@ p5

    的今日新闻头条
    1. 用@ pn @替换所有参数。因此,如果参数是@ p1,它将变为@ p1 @。
    2. 上面的字符串将变为:

      输出:

      它提供来自印度的@ p1 @最新新闻,视频@ p2 @以及@ p3 @ the world。从@ p4 @ Business获取今日新闻头条,@ p5 @

      任何快速帮助表示赞赏。

      感谢。

2 个答案:

答案 0 :(得分:1)

使用string.replaceAll功能,如下所示。

string.replaceAll("(@p\\d+)", "$1@");

\d+匹配一个或多个数字。 ()调用捕获组,捕获由()内的模式匹配的字符,并将捕获的字符存储到相应的组中。稍后我们可以通过指定像$1$2这样的索引来引用这些字符。

示例:

String s = "It provides @p1 latest news, videos @p2 from India and @p3 the world. Get today's news headlines from @p5 Business, @p5";
System.out.println(s.replaceAll("(@p\\d+)", "$1@"));

输出:

It provides @p1@ latest news, videos @p2@ from India and @p3@ the world. Get today's news headlines from @p5@ Business, @p5@

答案 1 :(得分:0)

您可以尝试这样的正则表达式:

public static void main(String[] args) {
    String s = "it provides @p1 latest news, videos @p2 from India and @p3 the world. Get today's news headlines from @p5 Business, @p5";
    System.out.println(s.replaceAll("(@p\\d+)(?=\\s+|$)", "$1\\@"));
}

O / P:

it provides @p1@ latest news, videos @p2@ from India and @p3@ the world. Get today's news headlines from @p5@ Business, @p5@

说明:

(@p\\d+)(?=\\s+|$) --> `@p` followed by any number of digits (which are all captured) followed by a space or end of String (which are matched but not captured..)