从字符串中提取字段值

时间:2017-01-05 14:06:43

标签: java regex

我有一个多行字符串,如下所示:

Welcome to blah blah blah.  Below is the information you requested:
temperature: 12c
windspeed: 30 knotts
humidity: 29%
I hope you have a nice day

好的,这是一个简化版本。无论如何,我想得到一个字段的值(例如windspeed)。这是一个带有新行的字符串(顺便说一下,有时字符串只用\ n分隔,有时用\ r \ n分隔,我不知道哪个,但这是一个旁边的。)

无论如何,有人写了这个方法

private String getField(String pdfContent, String field) {
    String temp;
    String value = null;
    int idx = pdfContent.indexOf(field);
    if (idx != -1) {
        temp = pdfContent.substring(idx);
        String line = temp.split(":")[1];
        value = line.split("\n")[0].trim();
        l.info(field + value);
    }
    return value;
}

除了在下面的实例中说,如果你想找到名字的值:

,这很好
You requested name, age and telephone number.  Below are the results
name: Jenny
age: 22
telephone: 867-5309

该方法将找到名称的第一个实例。我想我可以在场后寻找一个冒号,但之后可能会有一个冒号,如

Following is your request for telephone and name:
telephone: 867-5309
name: Jenny

在正常的正则表达式中,我会寻找" ^ name:"但我认为这不适用于这种情况。有没有办法在一行的开头找到该字段(在一个字符串中)?最喜欢寻找结肠,就像你可能有的那样

 name: Merrill Lynch Pierce Fenner Smith
 name_common: Merrill Lynch

只是寻找名字会先找到 Merrill Lynch Pierce Fenner Smith

哦,是的,这是Java

2 个答案:

答案 0 :(得分:2)

由于您有一个多行字符串我会认为您使用Scanner类findinLine()方法,此方法将读取字符串的部分:

scannerobj.findInLine("temperature:");  O/p: 12c
scannerobj.findInLine("windspeed:");    O/p: 30 knotts
scannerobj.findInLine("humidity:");     O/p: 29%

答案 1 :(得分:0)

您可以使用:/^name:\s(.*)$/gm

使用^确保该行以字段开头。

:\s确保在场地后面有一个半纤维素和一个空格。

(.*)$将读取该行的其余部分并将其放入一个组中。