[英]Matching a whitespace or emptry string using regex in Java
我在java中有這個正則表達式
String pattern = "(\\s)(\\d{2}-)(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)(-\\d{4})(\\s)";
它按預期工作,但我有一個新的問題,以獲得一些有效的日期:
第一個問題 :
如果我有這個字符串It was at 22-febrero-1999 and 10-enero-2009 and 01-diciembre-2000
我應該得到另一個字符串作為febrero-enero-diciembre
而我只得到febrero-enero
第二個問題
如果我在像12-octubre-1989
這樣的字符串中有一個日期,我會得到一個emptry String。
為什么我的模式在任何日期的開頭和結尾都有空格? 因為我必須在一個字符串中捕獲有效的月份,例如adsadasd 12-validMonth-2999 asd 11-validMonth-1989
我應該同時獲得validMonth ,然后永遠不會在asdadsad12-validMonth-1989 asdadsad 23-validMonth-1989
獲取字符串中asdadsad12-validMonth-1989 asdadsad 23-validMonth-1989
在最后一個我應該得到最后一個validMonth
PD:我的java代碼是
String resultado = "";
String pattern = "(\\s)(\\d{2}-)(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)(-\\d{4})(\\s)";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(fecha);
while (m.find()) {
resultado += m.group().split("-")[1] + "-";
}
return (resultado.compareTo("") == 0 ? "" : resultado.substring(0, resultado.length() - 1));
也許嘗試使用\\b
而不是\\s
:
String pattern = "\\b(\\d{2}-)(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)(-\\d{4})\\b";
這只匹配第一個數字前面沒有另一個單詞字符(數字,字母或下划線)的字符串,最后一個數字后面沒有單詞字符。 我還刪除了\\b
周圍的捕獲組,因為它總是一個零長度的字符串,如果匹配的話。
您可能希望使用單詞邊界:
\\b(\\d{2}-)(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)(-\\d{4})\\b
我相信有些月份可以進行一些優化(遺憾的是它可能降低可讀性,但應該加快速度):
\\b(\\d{2}-)((?:en|febr)ero|ma(?:rz|y)o|abril|ju[ln]io|agosto|(?:septiem|octu|noviem|diciem)bre)(-\\d{4})\\b
我不會使用邊界作為分隔符。
我建議使用空格或非數字,
或者沒有分類,並且在日期/年份中放入數字的驗證范圍。
通過這種方式,您可以捕獲更多嵌入日期
接近(相鄰)字母和下划線。
就像是:
# "(?<!\\d)\\d{2}-(?:enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)-\\d{4}(?!\\d)"
(?<! \d ) # Not a digit before us
\d{2} - # Two digits followed by dash
(?: # A month
enero
| febrero
| marzo
| abril
| mayo
| junio
| julio
| agosto
| septiembre
| octubre
| noviembre
| diciembre
)
- \d{4} # Dash followed by four digits
(?! \d ) # Not a digit after us
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.