在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'
我更喜欢只有一个空字符串。我已经尝试过使用负向前看metatag(?!):
result = regex.search('(.*(?!http)):', some_string)
但它仍然返回'http'而不是空字符串。怎么会这样?
答案 0 :(得分:2)
问题是,在您放置负向前瞻的位置,下一个字符也被限制为冒号:负向前瞻成功,因为h
不是下一个字符!
你可能实际想要的是将冒号放在冒号之后,以便下一个字符不是/
:
(.*):(?!/)
但在那时你也可以使用积极的前瞻并完全停止使用捕获组。您也不应该允许捕获冒号,或者RE可以比您预期的消耗更多:
result = regex.search('[^:]*(?=:[^/])', some_string)
result.group()