簡體   English   中英

使用Regex從Java中的字符串中提取序列

[英]Extract a sequence from a string in java using Regex

我有一個帶有模式的日志。 最后一點與常規有所不同。

a>  nc,71802265,0,"Tuesday, June 26, 2012 09:06:49 UTC",38.8335,-122.8072,1.6,0.00,21,"Northern California"
b>  ci,11127314,0,"Tuesday, June 26, 2012 08:37:52 UTC",34.2870,-118.3360,2.2,10.20,100,"Greater Los Angeles area, California"
c>  us,b000aqpn,6,"Tuesday, June 26, 2012 08:29:55 UTC",53.4819,-165.2794,4.4,25.60,96,"Fox Islands, Aleutian Islands, Alaska"

String regex = "^\\"[a-z,A-Z]\\s*\\(,)*[a-z,A-Z]\\"";
Pattern p = Pattern.compile(regex, Pattern.MULTILINE);

從a我需要---“北加州”從b我需要---“加利福尼亞大洛杉磯地區”,依此類推

謝謝

您可以使用String#lastIndexOf ,從倒數第二個字符開始查找第一個"

    String s = "a>  nc,71802265,0,\"Tuesday, June 26, 2012 09:06:49 UTC\",38.8335,-122.8072,1.6,0.00,21,\"Northern California\"";
    int start = s.lastIndexOf("\"", s.length() - 2) + 1;
    String location = s.substring(start, s.length() - 1);

為什么不使用String.split(regex,limit)並指定需要分割的逗號數量。

這樣,您可以使用逗號將最后一個字段保持不變 ,然后只需去除雙引號即可。

使用$錨指示您的匹配項應位於行的末尾:

String lines = "a>  nc,71802265,0,\"Tuesday, June 26, 2012 09:06:49 UTC\",38.8335,-122.8072,1.6,0.00,21,\"Northern California\"\nb>  ci,11127314,0,\"Tuesday, June 26, 2012 08:37:52 UTC\",34.2870,-118.3360,2.2,10.20,100,\"Greater Los Angeles area, California\"\nc>  us,b000aqpn,6,\"Tuesday, June 26, 2012 08:29:55 UTC\",53.4819,-165.2794,4.4,25.60,96,\"Fox Islands, Aleutian Islands, Alaska\"";
    String regex = "\"[^\"]*\"$";
    Matcher m = Pattern.compile(regex, Pattern.MULTILINE).matcher(lines);
    while (m.find()) {
        System.out.println(m.group());
    }

輸出:

"Northern California"
"Greater Los Angeles area, California"
"Fox Islands, Aleutian Islands, Alaska"
for(String s: log.split("\n")){
    System.out.println(s.replaceAll(".+(\".+\")$","$1"));
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM