匹配正则表达式中的可选部分
我有一段输入文本,它可能是这样的:
"URL: http://www.cnn.com Cookie: xxx; yyy"
或者只是:
"URL: http://www.cnn.com"
我该如何在Python中把URL和cookie分别存到两个不同的变量里呢?我不太清楚的是,那个cookie是可选的,怎么去处理这个部分。
谢谢。
4 个回答
1
只需使用单独的捕获组,并在正则表达式中用?
表示可选部分。如果某个捕获组没有捕获到任何内容,那么这个组的值会是None
。
>>> regex = re.compile(r'URL: (\S+)(?:\s+Cookie: (\S+))?')
>>> regex.match("URL: http://www.cnn.com Cookie: xxx;yyy").groups()
('http://www.cnn.com', 'xxx;yyy')
>>> regex.match("URL: http://www.cnn.com").groups()
('http://www.cnn.com', None)
我在上面的例子中使用了\S+
来表示URL和cookie的模式。你可以用你自己的真实URL和cookie模式来替换它们。
你可以用group(1)
和group(2)
来代替groups()
,它们的效果是一样的,不过groups()
在解包时更方便。例如:
url, cookie = match.groups()
1
这段内容是关于编程问题的讨论,主要是一些开发者在交流他们遇到的困难和解决方案。大家分享了自己的经验和想法,希望能帮助彼此解决问题。
在这个讨论中,有人提到了一些具体的代码示例,可能是用来说明某个问题的根源或者展示如何修复它。大家也可能会提到一些工具或方法,这些都是为了让编程变得更简单。
总之,这里是一个互相帮助的地方,大家都在努力让编程这件事变得更容易理解和操作。
import re
inputstring = "URL: http://www.cnn.com Cookie: xxx; yyy"
if 'Cookie' in inputstring:
m = re.match('URL: (.*?) Cookie: (.*)', inputstring)
if m:
url = m.group(1)
cookie = m.group(2)
print url
print cookie
else:
m = re.match('URL: (.*)', inputstring)
if m:
url = m.group(0)
print url
1
str = 'URL: http://www.cnn.com Cookie: xxx; yyy'
match = re.search(r'URL: (\S+)( Cookie: (.*))?', str)
print match.group(1)
print match.group(3)
>>> http://www.cnn.com
>>> xxx; yyy
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。