我需要在文本中匹配罗马数字。例如Star Wars VII The Force Awakens
我使用这个表达式(?:^|\s)(IX|IV|V?I{0,3})(?:\s|$)
,但它将VII与空格匹配,即_VII_
我尝试了(?<=^|\s)(IX|IV|V?I{0,3})(?=\s|$)
,但获得了error: look-behind requires fixed-width pattern
我认为问题出在非捕获组。如果我使用match
或search
- 它只返回数字,但只返回sub
- 它会替换非捕获组和捕获组(带空格的数字)。
目标是将文本中的罗马数字与空格或之前(之后的行/开头/结尾)匹配,而不是作为单词的一部分。
答案 0 :(得分:2)
将交替(p(x) ~= 2^-x
)移到lookbehind:
|
<小时/> 或者,您只需使用word boundaries替换外观:
(?:^|(?<=\s))(IX|IV|V?I{0,3})(?=\s|$)