如何查找(和)之间的文本

时间:2013-07-30 18:59:25

标签: java regex

我有几个字符串是这样的:

text (255)
varchar (64)    
...

我想找出(和)之间的数字并将其存储在字符串中。也就是说,显然,将这​​些长度存储在字符串中。 除了正则表达式解析部分之外,我还有其余的想法。 我无法弄清楚正则表达式模式。

我该怎么做?

示例代码如下所示:

Matcher m = Pattern.compile("<I CANT FIGURE OUT WHAT COMES HERE>").matcher("text (255)");

另外,我想知道是否有用于正则表达式解析的备忘单,从中可以直接获取正则表达式模式

5 个答案:

答案 0 :(得分:13)

我会使用普通的字符串匹配

String s = "text (255)";
int start = s.indexOf('(')+1;
int end = s.indexOf(')', start);
if (end < 0) {
    // not found
} else {
    int num = Integer.parseInt(s.substring(start, end));
}

您可以使用正则表达式,因为这有时会使您的代码更简单,但这并不意味着您应该在所有情况下使用。我怀疑这是一个简单的字符串indexOf和substring不仅更快,更短,但更重要的是,更容易理解。

答案 1 :(得分:5)

您可以使用此模式匹配括号中的任何文本

\(([^)]*)\)

或者只匹配数字(可能有空格填充):

\(\s*(\d+)\s*\)

当然,要在字符串文字中使用它,您必须转义\个字符:

Matcher m = Pattern.compile("\\(\\s*(\\d+)\\s*\\)")...

答案 2 :(得分:2)

以下是一些示例代码:

import java.util.regex.*;

class Main
{
  public static void main(String[] args)
  {
    String txt="varchar (64)";

    String re1=".*?";   // Non-greedy match on filler
    String re2="\\((\\d+)\\)";  // Round Braces 1

    Pattern p = Pattern.compile(re1+re2,Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
    Matcher m = p.matcher(txt);
    if (m.find())
    {
        String rbraces1=m.group(1);
        System.out.print("("+rbraces1.toString()+")"+"\n");
    }
  }
}

这将打印出在输入字符串(int)中找到的任何txt

正则表达式为\((\d+)\),以匹配()

之间的任何数字

答案 3 :(得分:2)

Matcher m = Pattern.compile("\\((\\d+)\\)").matcher("text (255)");
if (m.find()) {
    int len = Integer.parseInt (m.group(1));
    System.out.println (len);
}

答案 4 :(得分:2)

int index1  = string.indexOf("(")
int index2  = string.indexOf(")")

String intValue = string.substring(index1+1, index2-1);