用于匹配各种类型的节头的Java正则表达式
我正在尝试创建一个正则表达式(用于Java)来匹配可能的节标题。部分标题可以是罗马数字(最多39个)或类似“A.3.10”、“3.4”、“4”、“34.A”等,但似乎只匹配罗马数字或其他部分,即使我在正则表达式中使用了交替。我正在测试via 这是我的正则表达式:用于匹配各种类型的节头的Java正则表达式,java,regex,Java,Regex,我正在尝试创建一个正则表达式(用于Java)来匹配可能的节标题。部分标题可以是罗马数字(最多39个)或类似“A.3.10”、“3.4”、“4”、“34.A”等,但似乎只匹配罗马数字或其他部分,即使我在正则表达式中使用了交替。我正在测试via 这是我的正则表达式: (\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) 每个部分(罗马数字与字母+数字
(\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
有人能告诉我我遗漏了什么吗?字母+数字的模式也匹配两种坏情况:
Section AB.34 -->
Section AB.<word boundary>34<word boundary>
还考虑使用两个正则表达式,并在java代码中执行OR操作。对于以后必须阅读您的代码的人来说,这更容易理解。
字母+数字的模式也与以下两种情况相匹配:Section AB.34 -->
Section AB.<word boundary>34<word boundary>
还考虑使用两个正则表达式,并在java代码中执行OR操作。对于以后必须阅读您的代码的人来说,这更容易理解。
我的要求与原始问题中的细节有所不同。下面是我在两个不同用例中使用的两个正则表达式,以及它们通过的测试示例: (一)(\b(?)?
(二)
(\b(?我的需求最终与原始问题中的细节略有不同。下面是我在两个不同用例中使用的两个正则表达式,以及它们通过的测试示例:
(一)
(\b(?)?
(二)
(\b(?@user我确实关心有效的罗马数字(最多39个,意思是不需要担心L、D、C或M)。我修正了我的问题,以包括正确的示例(Section III
,而不是Section IIII
).疯狂的混音-看看A.B.34
,如果它通过了怎么办?另外,你可以把
放到[V|X]中
@ctwheels是的,应该通过。我现在为这个问题添加了几个正面和负面的测试示例。@user1145925多个正则表达式引擎-对于每种语言都不同,尽管有些使用相同的引擎。另外,A.5.B
和4.C.4
@user我确实关心有效的罗马数字(直到数字39,意思是不需要担心L、D、C或M)。我修正了我的问题,加入了正确的例子(第三节
,而不是第三节
)。疯狂的混音-看看A.B.34
,如果它通过了怎么办?另外,你可以在[V|X]中删除
@ctwheels是的,应该通过了。我现在为问题添加了几个正面和负面的测试示例。@user1145925多个正则表达式引擎-对于每种语言都不同,尽管有些使用相同的引擎。另外,A.5.B
和4.C.4
(\b(?<!\w)(?:[0-9]{1,2}|[A-Z])(?:\s?\.\s?(?:[0-9]{1,2}|[A-Z])){0,2}\b(?<=\w))
(\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))