常规模式"^ ab | cd $"和^(ab | cd)$之间有什么区别?

sle*_*lee 1 python regex

下面有正则表达式模式之间有什么区别?

pattern1 = "^ab|cd$"
pattern2 = "^(ab|cd)$"
pattern3 = "^(ab)|(cd)$"
Run Code Online (Sandbox Code Playgroud)

我尝试编写一个正则表达式来匹配罗马数字格式(0~3999).我写了一个模式如下:

pattern = "^M{1,3}|(CM|C?D|D?C{1,3})|(X?L|XC|L?X{1,3})|(I?V|IX|V?I{1,3})$"

而这种模式匹配"DIIII"或XIIII或类似这种模式的东西,但我期望大多数三个匹配.

为什么会这样?

Avi*_*Raj 6

r"^ab|cd$"
Run Code Online (Sandbox Code Playgroud)

ab在开始或cd结束时匹配.请注意,这与ab在行的中间或末尾出现的不匹配.同样,这cd与开头或中间的不匹配.

r"^(ab|cd)$"
Run Code Online (Sandbox Code Playgroud)

匹配仅包含ab或的整行cd.进一步的字符串cdab由一个组捕获.

r"^(ab)|(cd)$"
Run Code Online (Sandbox Code Playgroud)

与第一个相同,但它捕获abcd分成两个单独的组.