嗨,我有這樣的正則運算式
(.*(?=\sI )*) (.*)
但它沒有按照我的需要正確捕獲組。
對于此示例資料:
- 弗拉基米爾·哥特
- 蘭格拉布二世蘭格拉布
- Léa Magdalena III Rouault 某事
- 安娜·瑪麗亞·特奧多拉
- 莉亞·瑪利亞·特奧多拉二世
1,2 僅被正確捕獲。
所以我需要的是
- 如果沒有 I 被第一個空格分割。
- 如果在 I 之后還有其他詞,那么第一個組應該包含所有到 I 的內容。所以,第三個例子的 group1 應該是 Léa Magdalena III
- 如果在 I 之后沒有像示例 5 中的任何其他單詞,則 group1 應該被捕獲到第一個空格。
@Edit I 應該用羅馬數字代替
uj5u.com熱心網友回復:
如果你想支持任何羅馬數字,你可以使用
^(\S (?:.*\b(?=[MDCLXVI])M{0,4}(?:CM|CD|D?C{0,3})(?:XC|XL|L?X{0,3})(?:IX|IV|V?I{0,3})\b(?= \S))?) (.*)
如果您需要支持最多 XX 位的羅馬數字(獨占):
^(\S (?:.*\b(?=[XVI])X?(?:IX|IV|V?I{0,3})\b(?= \S))?) (.*)
請參閱正則運算式演示 #1和演示 #2。用Java 代碼中的\h或替換空格,\s并在 Java 字串文字中使用雙反斜杠。
詳情:
^- 字串的開始(- 第 1 組開始:\S- 一個或多個非空格(?:- 非捕獲組:.*- 盡可能多的除換行符以外的零個或多個字符\b- 一個詞的邊界(?=[MDCLXVI])- 要求緊鄰右側至少一位羅馬數字M{0,4}(?:CM|CD|D?C{0,3})(?:XC|XL|L?X{0,3})(?:IX|IV|V?I{0,3})- 羅馬數字模式\b- 一個詞的邊界(?= \S)- 正向前瞻,需要一個或多個空格,然后在當前位置之后緊跟一個非空格
)?- 非捕獲組結束,重復一次或零次(可選)
)- 第一組結束- 一個或多個空格(.*)- 第 2 組:該行的其余部分。
在 Java 中:
String regex = "^(\\S (?:.*\\b(?=[MDCLXVI])M{0,4}(?:CM|CD|D?C{0,3})(?:XC|XL|L?X{0,3})(?:IX|IV|V?I{0,3})\\b(?=\\h \\S))?)\\h (.*)";
// Or
String regex = "^(\\S (?:.*\\b(?=[XVI])X?(?:IX|IV|V?I{0,3})\\b(?=\\s \S))?)\\s (.*)";
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/378268.html
