0

Python/django では、次のように「:」文字の前の文字を照合して「タイトル」を抽出する文字列があります。

some_string = "This is my Title: This is some text"

だから私はタイトルを抽出するためにこのコードを使用しています:

result = regex.search('(.*):', some_string)
result.group(1)
>>> 'This is my Title'

次のように、ユーザーが文字列に URL のみを入力すると問題が発生します。

some_string = 'http://vimeo.com/49742318'
result.group(1)
>>> 'http'

空の文字列が返されることを好みます。否定的な先読みメタタグ (?!) を使用してみました:

result = regex.search('(.*(?!http)):', some_string)

ただし、空の文字列ではなく「http」が返されます。それはどうあるべきですか?

4

1 に答える 1

2

問題は、否定先読みを配置した時点で、次の文字もコロンに制限されることです。次の文字ではないため、否定先読みは自明に成功しますh!

おそらく実際に必要なのは、コロンの後に否定先読みを配置して、次の文字が/.

(.*):(?!/)

しかし、その時点で、肯定的な先読みを使用して、キャプチャ グループの使用をまったく停止することもできます。また、コロンのキャプチャを許可しないでください。そうしないと、RE が予想以上に多くを消費する可能性があります。

result = regex.search('[^:]*(?=:[^/])', some_string)
result.group()
于 2013-03-31T11:49:29.763 に答える