使用regex从字符串中读取多个变量

时间:2012-11-09 11:11:49

标签: java regex string io

我正在尝试将字符串拆分为不同的变量。与String.format()相反的东西。我想要一个特定的正则表达式匹配,然后应该将该部分字符串分配给特定变量。可以使用StringReader或任何其他类吗?

示例我的字符串是5 13-DEC-2010 16:47 A Tach 220 380 现在它应该分配给变量,如:

  1. number = 5
  2. date = 13-DEC-2010
  3. time = 16:47
  4. type = A Tach
  5. num1 = 220
  6. num2 = 380
  7. 其中所有变量都可以是字符串

3 个答案:

答案 0 :(得分:0)

试试这个:

var s = '5 13-DEC-2010 16:47 A Tach 220 380';
var re = /(\d+)\s+(\d{1,2}-[A-Z]{3}-\d{4})\s+(\d{2}:\d{2})\s+([\w\s+]*)\s+(\d+)\s+(\d+)/
var m = s.match(re);

答案 1 :(得分:0)

根据我过去的经验,没有任何内置类可以做到这一点。只需手动操作您的数据。像拆分它(str.split(“\ s”);),然后存储在它们各自的变量中。但问题是“A Tach”。

如果你问我,我只是用你的字符串中不会出现的正则表达式替换数据分隔符(在你的情况下是一个空格),类似于“; =;”你的字符串将被转换为 “5; =; 13-DEC-2010; =; 16:47; =; A Tach; =; 220; =; 380” 然后只需拆分数据并将其解析为各自的变量。

答案 2 :(得分:0)

public static void main(String[] args) {
    String s = "5 13-DEC-2010 16:47 A Tach 220 380";
    String re = "(\\d+)\\s+(\\d{1,2}-[A-Z]{3}-\\d{4})\\s+(\\d{2}:\\d{2})\\s+([\\w\\s+]*)\\s+(\\d+)\\s+(\\d+)";
    Pattern p = Pattern.compile(re);
    String number=null,date=null,time=null,type=null,num1=null,num2=null;
    Matcher m = p.matcher(s);
    if (m.matches()) {
        number = m.group(1);
        date = m.group(2);
        time = m.group(3);
        type = m.group(4);
        num1 = m.group(5);
        num2 = m.group(6);
    }
    System.out.println(number);
    System.out.println(date);
    System.out.println(time);
    System.out.println(type);
    System.out.println(num1);
    System.out.println(num2);
}