行内の単語間の複数のスペースの出現を検索する方法


109

行内の単語間の複数のスペースの出現を検索する方法

1. this is a line containing  2 spaces
2. this is a line containing   3 spaces
3. this is a line containing multiple spaces first  second   three   four

上記のすべてがこの正規表現に有効です。どの正規表現を使用すればよいですか?


その行の連続する空白スペースまたはすべてのスペースをチェックしようとしていますか?
Sachin Shanbhag

すべてのスペースではなく連続する空白スペース
Sam

1
「言葉の間」とはどういう意味ですか?2つの例では、単語と数字の間に複数のスペースがあります。句読点についてはどうですか(たとえば、ドットの後と次の単語の前の複数のスペースを一致させたいですか?)行の最後の文字の前後のスペースはどうですか?タブも一致させますか?空白のみで構成される行についてはどうですか?
Tim Pietzcker

「を含む2」、「を含む3」、「1番目と2番目」、「2番目と3」の間のスペース...はい、ドットの後と次の単語の前のスペースを照合します。
Sam

回答:


180
[ ]{2,}

スペース(2以上)

これらのスペースの前後に単語が続くことを確認することもできます。(タブや改行のような他の空白ではありません)

\w[ ]{2,}\w

同じですが、交換などのタスクのためのスペースのみを選択(キャプチャ)することもできます

\w([ ]{2,})\w

または、スペースの前後に単語の文字だけではなく何かがあることを確認してください(空白を除く)

[^\s]([ ]{2,})[^\s]

1
\w「単語文字」、つまり英数字とアンダースコアを意味しますが、その他の非スペース文字は意味しません。空白でないことを確認するには、\S(大文字のS)を使用します。また、最初のものは、2つ以上のスペースを含み、それ以外は何も含まない行にのみ一致します。
tdammers

私は質問を進化させようとしました。私はあなたがで言ったことを逃したことを理解しました\S、私はそのような機能のために文字の大文字小文字に依存しないことを好むだけです、それは読みやすいです。
AlexanderMP

1
なぜアンカーを使用しているのですか?彼は行のどこかに埋め込まれたスペースを探しています。
Tim Pietzcker

特に理由はありません。最初はそれらが必要だと思ったので、プロセスに沿ってドラッグしました。実際、私がこの場合にそれらを使用するのは間違っているとあなたは正しいです。すぐに回答を編集します。
AlexanderMP

1
\w[ ]{2,}\w一致しword.<2 spaces>more wordsないか、完全にスペースで構成される文字列です。[^\s]([ ]{2,})[^\s]\wスペースまたはbla<2 spaces>....のような文字列で始まる行では失敗します
Tim Pietzcker

12

シンプルなソリューション:

/\s{2,}/

これは、1つ以上の空白文字のすべての出現に一致します。行全体に一致させる必要があるが、2つ以上の連続する空白文字が含まれている場合のみ:

/^.*\s{2,}.*$/

空白が連続している必要がない場合:

/^(.*\s.*){2,}$/

.*通常、これは貪欲です。つまり、テストされた文字列の最後に到達し、必須の文字がある場合、その後に続く文字はすべて一致しません。通常、この場合、この?ようにを追加することをお勧めし.*?ます。PHPのPCRE
AlexanderMP

それは一致しません。"Greedy"は、パ​​ターン全体と一致しながら、可能な限り一致することを意味します。最初の貪欲がすでに文字列全体と一致することを期待しているとしても/^.*b.*$/、実際にはは一致しませ"foobar".*
tdammers

9

この正規表現はすべてのスペースを選択します。これを使用して単一のスペースに置き換えることができます

\s+

Pythonの例

result = re.sub('\s+',' ', data))

4

を検索し[ ]{2,}ます。これにより、行内の任意の場所に2つ以上の隣接するスペースが見つかります。また、先頭と末尾のスペース、およびスペースのみで構成される行にも一致します。あなたがそれを望まないなら、アレクサンダーの答えをチェックしてください。

実際には、括弧は省略できます。それらは明確にするためです(そうしないと、繰り返されているスペース文字はそれほどよく見えません:))。

の問題\s{2,}は、Windowsファイルの改行にも一致することです(改行はで示されるCRLF\r\n、で一致し\s{2}ます)。

複数のタブとスペースも検索したい場合は、 [ \t]{2,}


more than one space between words in a line[ ]{2,}言葉の間はどうですか?質問を読んだことがありますか?
AlexanderMP

OPが執筆中のように厳密にしたい場合に備えて、私があなたの回答を参照したのはそのためです。多分私達は彼に尋ねるべきです。
Tim Pietzcker

2

これが私の解決策です

[^0-9A-Z,\n]

これにより、すべての数字、カンマ、改行が削除されますが、データセットなどの中央のスペースが選択されます

  • 20171106,16632 ESCG0000018SB
  • 20171107,280 ESCG0000018SB
  • 20171106,70476 ESCG0000018SB
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.