本文介紹了匹配引號之間除逗號以外的任何內容的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我有此正則表達式:(?<=")(?:\.|[^"\])*(?=")
它匹配引號內的每個字符,并排除引號本身。
當我使用這樣的字符串嘗試時:
"one","two","three"
它還匹配逗號,因此匹配結果如下:
one
,
two
,
three
有沒有辦法修改正則表達式使其排除那些逗號?也就是說,輸出為:
one
two
three
我需要在正則表達式中排除那些引號,并且不在匹配結果中包含逗號。
這是我最大的正則表達式:
((0[1-9]|[12][0-9]|3[01]).(0[1-9]|1[012]).dddd)|(([0-1][0-9])|([2][0-3])):([0-5][0-9]):([0-5][0-9])|"((?:\.|[^"\])*)"
第一部分匹配日期:dd.mm.yyyy
((0[1-9]|[12][0-9]|3[01]).(0[1-9]|1[012]).dddd)
第二部分匹配時間:hh:mm:ss
(([0-1][0-9])|([2][0-3])):([0-5][0-9]):([0-5][0-9])
最后一個應該匹配引號之間的所有字符:
";((?:.|[^";])*)
但是正則表達式上的最后一部分不能以不排除引號的方式工作。此外,由于某些原因,它會刪除字符串中用引號引起來的所有空格。
輸入是包含如下字符串的文本文件:
"AK Pz 310u PI-13-5","23.02.2015","07:45:00","23.02.2015","09:20:00","False","True","23.02.2015","07:40:00","2","Common","AK Pz 310u PI-13-5","Common"
預期輸出是引號中的值數組(當然,本身不帶逗號和引號)。我之所以使用這么大的正則表達式來匹配日期和時間,是因為如果它們是錯誤的,就不應該進行匹配。
推薦答案
要使您的正則表達式不匹配逗號,您需要刪除環繞式,并使用捕獲組來獲取雙引號之間的內容。因為查找是不匹配任何字符的斷言。因此,在此"one","two","three"
輸入中,首先您的正則表達式與one
匹配,然后它與以下,
匹配,因為雙引號中也有逗號。
"((?:\.|[^"\])*)"
此正則表達式強制匹配每個擋路雙引號字符串。
Java代碼將是
String value = ""one","two","three"";
Matcher m = Pattern.compile(""((?:\\.|[^"\\])*)"").matcher(value);
while(m.find())
{
System.out.println(m.group(1));
}
輸出:
one
two
three
DEMO
這篇關于匹配引號之間除逗號以外的任何內容的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,