文字列の例:
- 私は数値文字列 75698
- 私は英数字の文字列 A14-B32-C7D です
これまでのところ、私の正規表現は機能します:(\S+)$
上記の正規表現によって生成された結果に数字(0-9)が1回以上含まれているかどうかを確認する方法(おそらく先読み)を追加したいですか?
これは機能していません:(\S+(?=\S*\d\S*))$
どうすればいいですか?
\D
それを並べ替えて、代わりにクラスを使用します\S
。
((?=\D*\d)\S+)$
説明:\D = [^\d]
言い換えれば、数字ではないのはすべてです。
以下を使用して、より明確にすることができます(例のパフォーマンスが向上します)。
((?=[a-zA-Z-]*\d)\[a-zA-Z\d-]+)$
大文字しかない場合は、何をすべきかがわかります。(クラスが小さいほど、正規表現が優れています)
text = '''
I am a numeric string 75698 \t
I am a alphanumeric string A14-B32-C7D
I am a alphanumeric string A14-B32-C74578
I am an alphabetic number: three
'''
import re
regx = re.compile('\s(?=.*\d)([\da-zA-Z-]+)\s*$',re.MULTILINE)
print regx.findall(text)
# result ['75698', 'A14-B32-C7D', 'A14-B32-C74578']
行末から空白で区切られた英数字部分をキャッチするために\s*
、 in before の存在に注意してください。$