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 回答