2016-09-15 12 views
2

サンプルテキスト正規表現:一桁以外のすべて

ユーザー1 2 3 4 5 6 7 10000 100007 user.b user.x 30000 80001 user.c理想

を表示出力

ユーザー10000 100007 user.b user.x 30000 80001 user.c

しかし (?!)の使用は私が所望の出力を得ることができるようにパターンを無視することができない:その正規表現から \b\d{1}\b マッチがある:

現在のソリューションは、

私が欲しいものを一致させることができます。

+0

あなたは 'によって何を意味しますか'(?!)?それはどこにある?あなたが必要とするのは、正規表現の置き換えメソッドで使うのに '\ s * \ b \ d \ b'です。環境とは何ですか? –

+1

あなたの[** regex works **](https://regex101.com/r/hX9gB3/1)は、これを ''''に置き換えてください。 @ウィクスター・ストリビュジューの解決策:https://regex101.com/r/hX9gB3/2 – Jan

答えて

2

スタンドアロンの数字を置き換えるだけでよいようです。あなたは、いくつかのオプションがあります。

  • (交換が空の文字列です)

  • 使用類似した正規表現を変更した\s*\b\d\bパターンを使用して取り付けますが、グループの周りのパターンを包むことにより、一度の桁をつかむと、その上に+限定記号を適用:(?:\s*\b\d\b)+

各非定量化原子として\d{1} = \dが一度試みであることに留意されたいです。

あなたは数字の周りに何の非空白記号がないことを確認する\d\d(?!\S)先読み前(?<!\S)後読みを追加したいかもしれないが、私は彼らがこのシナリオでは冗長である疑いがあります。

Python demo

import re 
s = "User 1 2 3 4 5 6 7 10000 100007 user.b user.x 30000 80001 user.c" 
res = re.sub(r'(?:\s*\b\d\b)+', '', s) 
print(res) 
# => User 10000 100007 user.b user.x 30000 80001 user.c 
+0

こんにちはWiktor、それはうまくいくようですが、Python正規表現の下では動作しません。 '>>> b = re.findall(r "\ s * \ b \ d \ b"、a) ' ' >>> print b ['1'、 '2'、 '3'、 '4'、 '5'、 '6'] ' 彼は無視するのではなくマッチを選択しています。空の文字列で置き換えてください。sedかegrepであれば分かりますか? – s3gfault

+0

@ s3gfault: 're.sub()'を使う必要があります。 – Jan

+1

Ahaなので、Pythonです。 're.sub(r '(?:\ s * \ b \ d \ b)+'、 ''、s)' –

関連する問題