1. ホーム
  2. python

[解決済み] 正規表現における空白

2022-03-03 11:36:31

質問

質問があるのですが、言ってもいいですか? \t と同等です。 \s+ を正規表現に置き換えることはできますか? 私はいくつかの行のコードを持っている:

>>> b = '\tNadya Carson'
>>> c = re.compile(r'\s\s*')
>>> c
<_sre.SRE_Pattern object at 0x02729800>
>>> c.sub('',b)
'NadyaCarson'
>>> c = re.compile(r'\s\s+')
>>> c
<_sre.SRE_Pattern object at 0x027292F0>

ここまでパターンオブジェクトがあるのに、スペース無しで代用しようとすると、代用されずにそのまま表示される。

>>> c.sub('',b)
'\tNadya Carson'

この場合、なぜ属性subが機能しないのでしょうか?ありがとうございます。

解決方法を教えてください。

\t とは等価ではありません。 \s+ しかし \s+ はタブにマッチする必要があります ( \t ).

あなたの例の問題は、2つ目のパターンの \s\s+ が探しているのは またはそれ以上の空白文字と \t は1つの空白文字のみです。

以下、理解の助けになるような例を挙げます。

>>> result = re.match(r'\s\s+', '\t')
>>> print result
None
>>> result = re.match(r'\s\s+', '\t\t')
>>> print result
<_sre.SRE_Match object at 0x10ff228b8>

\s\s+ にもマッチします。 ' \t' , '\n\t' , ' \n \t \t\n' .

また \s\s* は、以下のものと同等です。 \s+ . どちらも1つ以上の空白文字にマッチします。