[英]remove part of matcher after the match in regex pattern
我需要幫助編寫正則表達式模式,以從原始字符串中僅刪除部分匹配器。
原始字符串: 2017-02-15T12:00:00.268+00:00
預期字符串: 2017-02-15T12:00:00+00:00
Expected String以毫秒為單位刪除所有內容。
我的正則表達式模式如下所示: (:[0-5][0-9])\\.[0-9]{1,3}
我需要這個正則表達式,以確保我從一些時間字段中刪除只有毫秒,而不是點后面的所有內容。 但是使用上面的正則表達式,我也刪除了分鍾部分。 請提出建議和幫助。
將您的模式更改為(?::[0-5][0-9])(\\.[0-9]{1,3})
,在匹配器中運行find
並刪除group(1)
找到的所有內容group(1)
。
反斜杠將強制匹配'。' char,而不是任何char,這是正則表達式中的點所代表的。
(?:
定義一個非捕獲組,因此不會在匹配器的group(...)
考慮它。
並在您想要的內容周圍添加括號將使其在匹配器中顯示為組,在本例中為第一組。
一個很好的參考是模式javadoc: http : //docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html
您已在模式中定義了一個帶有(...)
的捕獲組 ,並且您希望在執行替換后將該部分字符串存在。 您只需要對此捕獲中存儲的值使用反向引用 。 它可以用$1
來完成:
String s = "2017-02-15T12:00:00.268+00:00";
String res = s.replaceFirst("(:[0-5][0-9])\\.[0-9]{1,3}", "$1");
System.out.println(res); // => 2017-02-15T12:00:00+00:00
替換模式中的$1
告訴正則表達式引擎它應該在匹配對象數據中查找ID為1的捕獲組。 由於您只有一對未轉義的括號(1個捕獲組),因此該組的ID為1。
使用$ 1和$ 2變量進行替換
string.replaceAll("(.*)\\.\\d{1,3}(.*)","$1$2");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.