从java中的消息中提取单词

时间:2017-11-05 12:13:12

标签: java regex string

我的消息格式为:

FixedWord1 variable1 FixedWord2 on FixedWord3 variable2/variable3, variable4 = variable5

我只需要从上面的消息中提取变量3。

以下是我的尝试:

String example = "FixedWord1 variable1 FixedWord2 on FixedWord3 variable2/variable3, variable4 = variable5";

我知道FixedWord3的长度是6.所以,

example.substring(example.lastIndexOf("FixedWord3") + 6 , example.lastIndexOf(","));  //To get {variable2}/{variable3}

然后,

String requiredString[] = example.split("/", 2);  //requiredString[1] would contain {variable3} even if it contains /

您能为这个问题提出更有效的解决方案吗?

4 个答案:

答案 0 :(得分:1)

修改 这个正则表达式应该可以解决问题。

Pattern pattern = Pattern.compile(".+(Device).+[/]([A-Z].+)[,][ ].+");
Matcher matcher = pattern.matcher(yourstring);
if(matcher.matches())
    System.out.println(matcher.group(2));

做出这项工作的假设:

  • Variable2没有斜杠'/'后跟大写字母
  • Variable3没有逗号','后跟空格''

答案 1 :(得分:1)

因为你知道变量2不能包含" /"你知道FixedWord3的长度那么这个怎么样?

    String deviceName = example.substring(example.lastIndexOf("Device") + 6, example.lastIndexOf(","));
    String lastPart = deviceName.substring(deviceName.indexOf("/") + 1);
    System.out.println(deviceName);
    System.out.println(lastPart);

打印:

  

SJ-ME3600X-185 /接口GigabitEthernet0 / 4

     

接口GigabitEthernet0 / 4

答案 2 :(得分:-1)

正则表达的帮助。

一种可能的方法是抓住" {variable2}"之后的比赛:

{variable2}\/{([^}]+)}

然后您可以使用MatcherPattern以及其他工具来使其在Java中运行。

请参阅here以获取解释和现场演示。

答案 3 :(得分:-1)

使用正则表达式模式是从java中的消息中提取单词的有效方法。

String s  = "FixedWord1 {variable1} FixedWord2 on FixedWord3 {variable2}/{variable3}, {variable4} = {variable5}";
Pattern p = Pattern.compile("/(\\{([^}]*)\\})");
Matcher m = p.matcher(s);
while (m.find()) {
  System.out.println(m.group(1));
}

输出 {variable3}