0

我得到了一些动态变化的文本,我需要一种方法来找到其中的某些部分。尤其像这些:

+124现在

+78 现在

+45现在

所以我的价值观总是以“+”加号开始,然后是一些数字,最小的一个,然后是“现在”这个词。

我尝试了很多这样的方法:

if(myString.contains("+[0-9]+now")) //false

但我厌倦了......你能帮忙吗?

4

6 回答 6

9

改用String#matches()

if (myString.matches(".*\\+[0-9]+now.*"))

此外,+它是一个特殊的正则表达式字符,这就是您需要转义它的原因。

如果您需要捕获数字,请使用Patternand Matcher

Pattern p = Pattern.compile("\\+([0-9]+)now");
Matcher m = p.matcher(myString);
while (m.find()) {
  System.out.println(m.group(1));
}

()是一个捕获组,这意味着它将告诉正则表达式引擎存储匹配的内容,以便您以后可以使用group().

于 2012-08-29T13:07:52.577 回答
6

尝试这个......

Pattern pat = Pattern.compile("\\+\\d+now");
Matcher mat = pat.matcher("Input_Text");

while(mat.find()){

   // Do whatever you want to do with the data now...

 }
于 2012-08-29T13:09:20.263 回答
3

您需要像这样转义第一个“+”:

if(myString.matches("\\+[0-9]+now"));

+ 表示“从字面上找到字符串中的 +”而不是“找到该字符 1 次或多次”

于 2012-08-29T13:08:26.613 回答
2

我假设您想匹配字符串或者提取中间的数字?在你的情况下,问题是+us 一个特殊字符,因此你需要像这样转义它:\\+,所以你的正则表达式变成\\+[0-9]+now.

至于您的第二个问题,该.contains方法采用字符串,而不是正则表达式,因此您的代码将不起作用。

    String str = "+124now";
    Pattern p = Pattern.compile("\\+(\\d+)now");
    Matcher m = p.matcher(str);

    while (m.find())
    {
        System.out.println(m.group(1));         
    }

在这种情况下,我已经提取了数字,以防万一这是您所追求的。

于 2012-08-29T13:11:08.583 回答
1

既然你说字符串总是以开头+并总是以now为什么不检查这是真的。如果不是,那么就有问题了。

    String[] vals = {"+124now", "+78now", "-124now", "+124new"};

    for (String s : vals) {
        if (s.matches("^\\+(\\d+)now$")) {
            System.out.println(s + " matches.");
        } else {
            System.out.println(s + " does not match.");
        }
    }

当然,如果您想捕获数字,请使用 npinti 建议的匹配器。

编辑:这是获取号码的方法:

    Pattern p = Pattern.compile("^\\+(\\d+)now$");
    for (String s : vals) {
        Matcher m = p.matcher(s);
        if (m.matches()) {
            System.out.println(s + " matches and the number is: " + m.group(1));
        } else {
            System.out.println(s + " does not match.");
        }
    }
于 2012-08-29T13:18:21.763 回答
1

该方法contains不会将其参数解释为正则表达式。请改用该方法matches。你也必须逃避+,像这样:

if (myString.matches("\\+\\d+now"))
于 2012-08-29T13:09:30.863 回答