簡體   English   中英

java-正則表達式拆分包含多個組的字符串

[英]java - Regex to split a string containing multiple groups

我需要分割這串

(2005)[1]1,2,3,4[2]1(2008)[2]2–;3,4(2009)[3]1,2,3-4(2010)[4]1,2,3-4(2011)[5]1(2012)[5]2,3-4[6]1,2\[\](2014)[6]3-4[7]1-2(2015)[7]3-4[8]1-2(2016)[10]1[8]3-4[9]1-2,3-4(2017)[10]2

如:

1, "1,2,3,4"  
2, 1 2
2, 2–;3,4

對於輸入“((2005)[1] 1,2,3,4”),我需要捕獲組1中[]中的值,以及捕獲組2中其余字符串(1,2,3,4)的值,並重復執行整個字符串

我已經創建了此正則表達式字符串,但無法正常工作

\[(.*?)\](.+?)(?=\[|\(|$)

請查看我的正則表達式實現

問題是,當[]之后沒有任何東西捕獲(年份)時,它不應該這樣做

模式的(.+?)(?=\\[|\\(|$)部分匹配除換行符外的任何1個或多個字符,直到最左邊的[(或字符串的末尾。您需要允許匹配或這里還有更多字符。

但是,這里的[^\\[(]否定字符類將更加高效和優雅:

\[(.*?)\]([^\[(]*)

請參閱此正則表達式演示

還是更有效率

\[([^\]\[]*)\]([^\[(]*)

參見另一個正則表達式演示

細節

  • \\[ -一個[
  • ([^\\]\\[]*) -組1: []以外的任何0+個字符
  • \\] -一個]
  • ([^\\[(]*) -組2:除[(以外的任何0+個字符。

暫無
暫無

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

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