58

潜在的に空の文字列に一致する正規表現に関する投稿はたくさんありますが、空の文字列にのみ一致する正規表現を提供するものをすぐに見つけることができませんでした。

^これは、任意の行の先頭と一致し、$任意の行の末尾と文字列の末尾に一致することを知っています。そのため、/^$/「\n」、「foobar\n\n」などの空の文字列よりもはるかに多く一致します。

ただし、文字列の先頭と一致し、文字列の末尾と一致する/\A\Z/ため、空の文字列だけに一致すると思いました。ただし、私のテストでは、「\ n」にも一致することが示されています。何故ですか?\A\Z/\A\Z/

4

11 に答える 11

62

どの文字にも否定先読みを使用します。

^(?![\s\S])

文字クラスはさまざまな改行文字を含む任意の文字と一致するため、これは入力が完全に空の場合にのみ一致します。

于 2015-02-21T23:01:52.653 に答える
12

http://www.regular-expressions.info/anchors.htmlの「改行で終わる文字列」セクションで説明されているように、\Zは通常、改行で終わる文字列の最後の改行の終わりの前に一致します。文字列の末尾のみを一致させたい場合は、 を使用する必要があります\z。この規則の例外は Python です。

つまり、空の文字列のみに一致させるには、 を使用する必要があります/\A\z/

于 2013-10-01T22:57:03.263 に答える
5

^$ -- 空の文字列を受け入れる正規表現。また、「/n」または「foobar/n」とは一致しません。この正規表現はhttps://www.regextester.com/1924でテストできます。

既存の正規表現がある場合は、正規表現で or(|) を使用して空の文字列と一致させます。たとえば /^[A-Za-z0-9&._ ]+$|^$/

于 2019-06-11T09:44:59.033 に答える
4

Python は、\zこの方法を (まだ) サポートしていない唯一の広く使用されている言語だと思います。Russ Cox / Google の超高速re2C++ ライブラリの Python バインディングがあり、バンドルされているre.

これについては、 Perl Compatible Regular Expression (PCRE) in Pythonの SOに関する優れた議論 (回避策を含む) があります。

python
Python 2.7.11 (default, Jan 16 2016, 01:14:05) 
[GCC 4.2.1 Compatible FreeBSD Clang 3.4.1 on freebsd10
Type "help", "copyright", "credits" or "license" for more information.
>>> import re2 as re
>>> 
>>> re.match(r'\A\z', "")
<re2.Match object at 0x805d97170>

@tchristの答えは読む価値があります。

于 2016-03-22T17:53:44.297 に答える
2

ここを見てみてください: https://docs.python.org/2/library/re.html

私はあなたが持っていたのと同じ問題に遭遇しました。空の文字列と "\n" のみに一致する正規表現しか作成できませんでした。最初に、文字列内の改行文字を別の文字でトリミング/置換してみてください。

私はhttp://pythex.org/を使用していて、次のような奇妙な正規表現を試していました:

()

(?:)

^$

^(?:^\n){0}$

等々。

于 2014-12-16T20:42:44.027 に答える
2

答えは言語に依存するかもしれませんが、言及していないので、jsで思いついたのは次のとおりです。

 var a = ['1','','2','','3'].join('\n');

 console.log(a.match(/^.{0}$/gm)); // ["", ""]

 // the "." is for readability. it doesn't really matter
 a.match(/^[you can put whatever the hell you want and this will also work just the same]{0}$/gm)

a.match(/^(.{10,}|.{0})$/gm)空行または基準を満たす行に一致させることもできます。(これは私がここにたどり着くために探していたものです。)

^ は任意の行の先頭に一致し、 $ は任意の行の末尾に一致することを知っています

これは、複数行フラグがオンになっている場合にのみ当てはまります。それ以外の場合は、文字列の先頭/末尾のみに一致します。私はあなたがこれを知っていて、それをほのめかしていると仮定していますが、学習者のためにここに注意したいと思いました.

于 2015-02-21T22:58:51.480 に答える