本文介紹了匹配引號(hào)之間除逗號(hào)以外的任何內(nèi)容的處理方法,對(duì)大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!
問題描述
我有此正則表達(dá)式:(?<=")(?:\.|[^"\])*(?=")
它匹配引號(hào)內(nèi)的每個(gè)字符,并排除引號(hào)本身。
當(dāng)我使用這樣的字符串嘗試時(shí):
"one","two","three"
它還匹配逗號(hào),因此匹配結(jié)果如下:
one
,
two
,
three
有沒有辦法修改正則表達(dá)式使其排除那些逗號(hào)?也就是說,輸出為:
one
two
three
我需要在正則表達(dá)式中排除那些引號(hào),并且不在匹配結(jié)果中包含逗號(hào)。
這是我最大的正則表達(dá)式:
((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)
第二部分匹配時(shí)間:hh:mm:ss
(([0-1][0-9])|([2][0-3])):([0-5][0-9]):([0-5][0-9])
最后一個(gè)應(yīng)該匹配引號(hào)之間的所有字符:
";((?:.|[^";])*)
但是正則表達(dá)式上的最后一部分不能以不排除引號(hào)的方式工作。此外,由于某些原因,它會(huì)刪除字符串中用引號(hào)引起來的所有空格。
輸入是包含如下字符串的文本文件:
"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"
預(yù)期輸出是引號(hào)中的值數(shù)組(當(dāng)然,本身不帶逗號(hào)和引號(hào))。我之所以使用這么大的正則表達(dá)式來匹配日期和時(shí)間,是因?yàn)槿绻鼈兪清e(cuò)誤的,就不應(yīng)該進(jìn)行匹配。
推薦答案
要使您的正則表達(dá)式不匹配逗號(hào),您需要?jiǎng)h除環(huán)繞式,并使用捕獲組來獲取雙引號(hào)之間的內(nèi)容。因?yàn)椴檎沂遣黄ヅ淙魏巫址臄嘌浴R虼耍诖?code>"one","two","three"輸入中,首先您的正則表達(dá)式與one
匹配,然后它與以下,
匹配,因?yàn)殡p引號(hào)中也有逗號(hào)。
"((?:\.|[^"\])*)"
此正則表達(dá)式強(qiáng)制匹配每個(gè)擋路雙引號(hào)字符串。
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
這篇關(guān)于匹配引號(hào)之間除逗號(hào)以外的任何內(nèi)容的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,