开始一个新问题,因为我的另一个问题解决了正则表达式的另一个问题。
这是我的正则表达式:
(?i)\\d{1,4}(?<!v(?:ol)?\\.?\\s?)(?![^\\(]*\\))
为了清晰起见,正则表达式分裂:
(?i)
- 不区分大小写
\\d{1,4}
- 1-4位数字
(?<!v(?:ol)?\\.?\\s?)
数字前面不能有'v','v。','vol','vol。',末尾有空格或没有空格。
(?![^\\(]*\\))
- 数字不能在括号内。
除了'vol。'之外,它都有效。位:
@"Words words 342 words (2342) (words 2 words) (words).ext"
结果342 - 正确。
@"Words - words words (2010) (words 2 words) (words).ext"
结果无 - 正确。
@"words words v34 35.ext"
结果34 - 不正确。
@"Words vol.342 343 (1234) (3 words) (desc).ext"
结果342 - 不正确。
我的'vol'我做错了什么部?
答案 0 :(得分:2)
你需要在数字前加上lookbehind。此外,您需要在lookbehind中添加数字作为非法字符,或者4
中的v.34
将匹配。尝试
(?i)(?<!v(?:ol)?\\.?\\s*\\d*)\\d{1,4}(?![^(]*\\))
这是期待(编辑:错误的,事实证明)regexkitlite支持lookbehind内部的无限重复,这不是很多正则表达式的味道。
查看docs表明它确实支持lookbehind中的有限(但可变)重复,并且如果您知道以下内容仅在vol.
之间最多有一个空格时才有效和数字,然后你可以尝试
(?i)(?<!v(?:ol)?\\.?\\s?)(?<!\\d)\\d{1,4}(?![^(]*\\))