我有几个字符串是这样的:
text (255)
varchar (64)
...
我想找出(和)之间的数字并将其存储在字符串中。也就是说,显然,将这些长度存储在字符串中。 除了正则表达式解析部分之外,我还有其余的想法。 我无法弄清楚正则表达式模式。
我该怎么做?
示例代码如下所示:
Matcher m = Pattern.compile("<I CANT FIGURE OUT WHAT COMES HERE>").matcher("text (255)");
另外,我想知道是否有用于正则表达式解析的备忘单,从中可以直接获取正则表达式模式
答案 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);