正規表現を使用して、文字列に500フィート未満の値が含まれているかどうかを判断しようとしています。重要なのは、マッチングにはいくつかの重要な制約と仮定があります。
.
ではないことが保証されています,
これまでの私の試み:
試行1
\b[1-4]{0,1}[0-9]{1,2}(\.[0-9]{1,}}){0,1} {0,}(ft|feet)\b
これは良かったのですが、小数を考慮できず、1000.5フィート(「5フィート」に一致)のような値に一致します
試行2
私の次の試みは、試合の前に.
または任意の数字が付いていないことを確認するために、ネガティブルックビハインドを含めることでした。
(?<!(\.|[0-9]))([1-4]{0,1}[0-9]{1,2}(\.[0-9]{1,}}){0,1} {0,}(ft|feet))\b
残念ながら、これは現在どの小数とも一致しません(たとえば、5.5フィートは一致するはずですが、一致しません)。ネガティブな後読みがどのように機能するかを誤解しているのではないかと思います。
私がどこで間違っているのかを理解する助けをいただければ幸いです!
テストケース:
あなたは使用することができます
r"(?<!\d\.)(?<!\d)(?:[1-9]|[1-9]\d|[1-4]\d\d)(?:\.\d+)?\s*f(?:ee)?t\b"
正規表現のデモを見る
詳細
(?<!\d\.)(?<!\d)
-現在の場所の直前に数字+ドットまたは数字だけがないことを確認する2つのネガティブルックビハインド(?:[1-9]|[1-9]\d|[1-4]\d\d)
- 数
[1-9]
-から1
の9
[1-9]\d
-から10
の99
[1-4]\d\d
-100
へ499
(?:\.\d+)?
-ドットと1桁以上のオプションのシーケンスに一致するオプションの非キャプチャグループ\s*
-0以上の空白f(?:ee)?t
-ft
またはfeet
(ただしfet
)\b
-単語の境界。この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加