簡體   English   中英

在正則表達式模式中匹配后刪除匹配器的一部分

[英]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

請參閱Java演示正則表達式演示

替換模式中的$1告訴正則表達式引擎它應該在匹配對象數據中查找ID為1的捕獲組。 由於您只有一對未轉義的括號(1個捕獲組),因此該組的ID為1。

使用$ 1和$ 2變量進行替換

string.replaceAll("(.*)\\.\\d{1,3}(.*)","$1$2");

暫無
暫無

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

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