2017-02-03 1 views
0

が含まれていない場合、私正規表現する新たなんだと私は少しこだわっています。一致する複数の単語、彼らはこの質問は馬鹿かもしれない数

私は彼らの中の数字や言葉で、複数の文字列を持っています。整数を含んでいなければ、単語だけに一致させたい。それから、

12 This Is A Test 9eifEf 12

、私はThis Is A Testにマッチしたいと思います。それから、

11 Stack 21deEh 12

、私はStackにマッチしたいと思います。

RegExrを使用して、.[a-z]の式を思いついたようですが、それは一度に2文字までで、スペースではなく最大2文字に一致しました。

コード要求のために申し訳ありません。私はパターンよりも何も必要ありません。私はどんな助けにも感謝します。

+0

文字列を分割してすべての文字が文字かどうかを確認します( 'x [.isalpha()]の場合は' s.split()内のxは ')。それともより具体的な要件ですか? –

+0

正規表現が偽である理由を理解できましたか? は '.'は(あなたが望むものではない)任意の文字にマッチします、' [-Z]は '唯一の小文字にマッチします、そして、あなたは' \ B'単語の区切り文字を忘れてしまいました。ソリューションのためのWillemの記事を参照してください。 –

答えて

3

は単純に使用します。ここでは

\b[A-Za-z]+\b 

  • \bは、私たちが数字で始まる単語と一致しないような単語の境界です。
  • [A-Za-z]はすべて上下の文字を含む文字グループです。そして
  • +は "一つ以上の" を意味します。あなたは、文字列を返すようにしたい場合は

、次のことができます - @Jamesが言うように - ' '.join(..)使用:

$ python3 
Python 3.5.2 (default, Nov 17 2016, 17:05:23) 
[GCC 5.4.0 20160609] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import re 
>>> rgx=re.compile(r'\b[A-Za-z]+\b') 
>>> text='12 This Is A Test 9eifEf 12' 
>>> rgx.findall(text) 
['This', 'Is', 'A', 'Test'] 
>>> ' '.join(rgx.findall(text)) 
'This Is A Test' 
+0

また、結合された文字列を返すために '' '.join(...) ' – James

+0

@James:ありがとう。答えを更新しました。 –

2

正規表現のための必要はありませんが、分割さ言葉のうち、数字をフィルタリングするためにstr.isalphaを使用します。

s = "12 This Is A Test 9eifEf 12" 

print(" ".join([x for x in s.split() if x.isalpha()])) 

ができます:

This Is A Test 
しかし、これは複数のスペースを保持しません。しかし、

print(" ".join([x for x in s.split(" ") if not x or x.isalpha()])) 
+0

@ChrisRands:編集に感謝しますが、角括弧は意図的です。見た目が驚くほど速いです。 –

関連する問題