2017-06-12 13 views
0

1〜8文字の正規表現を使用してテキストを抽出したい2文字以上は含まない([A-Za-z])。例えばRegex- 1〜8文字のテキストを抽出し、2文字([A-Za-z])を超えないテキストを抽出する

:この例では

Valid: "12A-32B" from the text "Register:12A-32B Index:A" 
Invalid: "12 Index" from the text "Register:12 Index:A" 

、抽出されたテキストは、テキストが境界として「登録」が必要です。

私は肯定的/否定的な先読みを使ってみましたが、役に立たなかった。

ありがとうございます。

+0

「登録:12A-32Bインデックス:A」 - なぜそうすべきではありませんか? 'er:12'、' 32B I'?そして、なぜ2番目から 'r:12私は?私はそれが単語の境界と関係があると仮定している(**しかし質問**には記載されていない)。続ける:2番目の ':12'? ':A'は同じ?どうしてそんなの? – ClasG

+0

正規表現の境界を示す質問を編集しました。 – Daniel

答えて

2

は、この正規表現を試してみてください:

^(?!.*[A-Za-z].*[A-Za-z].*[A-Za-z])[A-Za-z0-9-]{1,8}$ 

これは文字列に登場する2つの文字の最大で、最大8つの数字や文字を含む任意の文字列にマッチします。

元のテキストの中にテキストを抽出するには、追加の手順が必要な場合があります。あなたは、この正規表現を使用して試みることができる:

Register:(.*) Index 

は、我々はすべてのための単一の正規表現を使用して試みることができるが、それは複雑になります。また、アプリレイヤーから2つのステップを使用する方が簡単かもしれません。

Demo

+0

@ClasG文字と数字に加えてハイフンを許可するように答えを更新しました(アサーションから禁止されているものを除いて)。 –

+0

助けてくれてありがとう – Daniel

+0

@ダニエル問題はありません:-) –

0

私は解決策

  1. が抽出されたテキストと、この正規表現を使用し

  2. 開始デリミタの登録を使用してテキストを抽出した:

    ^(.{1,8}?)(?<![A-Za-z]{3})(|$) 
    
関連する問題