0

私の他の質問として新しい質問を開始すると、正規表現の別の問題が解決しました。

これが私の正規表現です:

(?i)\\d{1,4}(?<!v(?:ol)?\\.?\\s?)(?![^\\(]*\\))

わかりやすくするために正規表現を分割します。

(?i)- 大文字小文字を区別しません

\\d{1,4}- 1 ~ 4 桁の数字

(?<!v(?:ol)?\\.?\\s?)末尾にスペースがあってもなくても、番号の前に「v」、「v.」、「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 - 不正解。

「巻」の何が間違っていますか。セクション?

4

1 に答える 1

2

数字の前に後読みを置く必要があります。また、後読み内に不正な文字として数字を追加する必要があります。そうしないと、4inv.34が一致します。試す

(?i)(?<!v(?:ol)?\\.?\\s*\\d*)\\d{1,4}(?![^(]*\\))

これは、多くの正規表現フレーバーではサポートされていない後読み内で、regexkitlite が無限の繰り返しをサポートすることを期待しています (編集: 間違っていることが判明しました)。

ドキュメントを調べると、後読み内で有限(ただし可変)の繰り返しがサポートされていることが示されていますvol.

(?i)(?<!v(?:ol)?\\.?\\s?)(?<!\\d)\\d{1,4}(?![^(]*\\))
于 2010-11-24T06:54:05.033 に答える