簡體   English   中英

Java 正則表達式,用於匹配各種類型的節標題

[英]Java regex for matching various types of section headers

我正在嘗試創建一個正則表達式(用於 Java)來匹配潛在的部分標題。 部分標題可以是羅馬數字(最多 39)或“A.3.10”、“3.4”、“4”、“34.A”等。但它似乎只匹配羅馬數字或者只是另一部分,即使我在正則表達式中使用了交替。 我正在通過https://regexr.com/進行測試。

這是我的正則表達式:

(\b(?:(?:X{0,3}(?:I[V|X]|V?I{0,3}))|(?:(?:[0-9]{1,2}|[A-Z])(?:\s?\.\s?(?:[0-9]{1,2}|[A-Z])){0,2}))\b)

每個部分(羅馬數字與字母+數字)似乎本身都表現正確:

roman numeral:
(\bX{0,3}(?:I[V|X]|V?I{0,3})\b)

letter+digit:
(\b(?:[0-9]{1,2}|[A-Z])(?:\s?\.\s?(?:[0-9]{1,2}|[A-Z])){0,2}\b)

以下是一些應該匹配的測試用例:

Section A.3
Section A . 34
Section 3 . A
Section 1.2.5.6
Section 1.2.5
Section 1.2. 5
Section 1 . 2 . 5
Section III
Section  XVI
Section IX
Section 3.B
Section 35.C
Section A.B.34
Section 3
Section 34
Section C
Section 34.35
Section A.3.C
Section 3.A.5

以下是一些不應該通過的:

A common phrase is this though..
Section AB.34
Section AB.5
Section CD
Section 345

有人可以告訴我我錯過了什么嗎?

我的要求最終與原始問題中的細節有所不同。 以下是我最終用於 2 個不同用例的 2 個正則表達式,以及它們通過的測試示例:

1) https://regex101.com/r/D9sQGz/2

(\b(?<!\w)(?:[0-9]{1,2}|[A-Z])(?:\s?\.\s?(?:[0-9]{1,2}|[A-Z])){0,2}\b(?<=\w))

2) https://regex101.com/r/v0NjW6/2

(\b(?<!\w)X{0,3}(?:I[VX]|V?I{0,3})\b(?<=\w)(?:\s?\.\s?(?:[0-9]{1,2}|[A-Z])){0,2}\b(?<=\w))

字母+數字的模式也匹配兩個壞情況:

Section AB.34 -->
Section AB.<word boundary>34<word boundary>

嘗試讓各個正則表達式正確,然后再次測試!

像這樣組合兩個正則表達式應該沒有問題(如您的代碼中所做的那樣):

(?:(?:regex1)|(?:regex2))

還可以考慮使用兩個正則表達式並在 Java 代碼中執行 or 操作。 對於以后必須閱讀您的代碼的人來說,這更容易理解。

暫無
暫無

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

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