1

文字列の例:

  1. 私は数値文字列 75698
  2. 私は英数字の文字列 A14-B32-C7D です

これまでのところ、私の正規表現は機能します:(\S+)$

上記の正規表現によって生成された結果に数字(0-9)が1回以上含まれているかどうかを確認する方法(おそらく先読み)を追加したいですか?

これは機能していません:(\S+(?=\S*\d\S*))$

どうすればいいですか?

4

3 に答える 3

1

\Dそれを並べ替えて、代わりにクラスを使用します\S

((?=\D*\d)\S+)$

説明:\D = [^\d]言い換えれば、数字ではないのはすべてです。

以下を使用して、より明確にすることができます(例のパフォーマンスが向上します)。

((?=[a-zA-Z-]*\d)\[a-zA-Z\d-]+)$

大文字しかない場合は、何をすべきかがわかります。(クラスが小さいほど、正規表現が優れています)

于 2013-05-14T11:38:01.307 に答える
0
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 の存在に注意してください。$

于 2013-05-14T16:38:48.857 に答える