我试图通过使用正则表达式从字符串中提取数据。
我的数据如下:
12 170 0.11918
170 12 0.11918
12 182 0.06361
182 12 0.06361
12 198 0.05807
198 12 0.05807
12 242 0.08457
242 12 0.08457
11 30 0.08689
30 11 0.08689
这里的问题是两个数字之间的空格数不同。
总而言之,我想从每一行中提取两个Integers和一个Double。 因此我试图使用正则表达式。
Pattern p = Pattern.compile("(([0-9]+.[0-9]*)|([0-9]*.[0-9]+)|([0-9]+))");
Matcher m = p.matcher(" 6 7781 0.01684000");
while (m.find()) {
System.out.println(m.group(0));
}
我现在的正则表达式不起作用。有没有人帮助一个合适的正则表达式因此我可以使用数据或任何其他帮助吗?
答案 0 :(得分:2)
为什么不读取每一行并执行line.trim().split("\\s+")
?如果您的项目已经使用了番石榴,那么也可以使用Splitter
。
答案 1 :(得分:1)
我建议使用Scanner
。
Scanner scanner = new Scanner(line);
scanner.useDelimiter(" ");
int int1 = scanner.nextInt()
int int2 = scanner.nextInt()
double double1 = scanner.nextDouble()
答案 2 :(得分:1)
检查http://txt2re.com/index-java.php3?s=%2012%20170%200.11918&11&5&12&4&13&1
你可能对下面的int1,int2和float1感兴趣
public static void main(String[] args)
{
String txt=" 12 170 0.11918";
String re1="(\\s+)"; // White Space 1
String re2="(\\d+)"; // Integer Number 1
String re3="(\\s+)"; // White Space 2
String re4="(\\d+)"; // Integer Number 2
String re5="(\\s+)"; // White Space 3
String re6="([+-]?\\d*\\.\\d+)(?![-+0-9\\.])"; // Float 1
Pattern p = Pattern.compile(re1+re2+re3+re4+re5+re6,Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
Matcher m = p.matcher(txt);
if (m.find())
{
String ws1=m.group(1);
String int1=m.group(2);
String ws2=m.group(3);
String int2=m.group(4);
String ws3=m.group(5);
String float1=m.group(6);
System.out.print("("+ws1.toString()+")"+"("+int1.toString()+")"+"("+ws2.toString()+")"+"("+int2.toString()+")"+"("+ws3.toString()+")"+"("+float1.toString()+")"+"\n");
}
}
答案 3 :(得分:0)
试试这个:
([\d.]+)
- 这将使所有字符串只包含数字或句点(。)。
编辑:
我看到你想要一组三个组。相反,这将有助于忽略空白区域,并抓住三组数字。前导^
和尾随$
确保您只匹配一行。
^\s*?([\d.]+)\s*([\d.]+)\s*?([\d.]+)\s*?$
答案 4 :(得分:0)
像这样的东西(根据需要修理浮动部分) -
# raw: (?m)^\h*(\d+)\h+(\d+)\h+(\d*\.\d+)
# quoted: "(?m)^\\h*(\\d+)\\h+(\\d+)\\h+(\\d*\\.\\d+)"
(?m) # Multi-line modifier
^ # BOL
\h* # optional, horizontal whitespace
( \d+ ) # (1), int
\h+ # required, horizontal whitespace
( \d+ ) # (2), int
\h+ # required, horizontal whitespace
( \d* \. \d+ ) # (3), float
答案 5 :(得分:0)
String s = " 12 170 0.11918\n" + "170 12 0.11918 \n"
+ " 12 182 0.06361\n" + "182 12 0.06361 \n"
+ " 12 198 0.05807\n" + "198 12 0.05807 \n"
+ " 12 242 0.08457\n" + "242 12 0.08457 \n"
+ " 11 30 0.08689\n" + " 30 11 0.08689 \n";
String[] lines = s.split("\\n");
for( String line : lines ) {
Scanner scan = new Scanner(line);
scan.useDelimiter("\\s+");
scan.useLocale(Locale.ENGLISH);
System.out.println(scan.nextInt());
System.out.println(scan.nextInt());
System.out.println(scan.nextDouble());
}
我会使用扫描仪来解决这个问题。