匹配正则表达式中的可选部分

1 投票
4 回答
759 浏览
提问于 2025-04-16 09:49

我有一段输入文本,它可能是这样的:

"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

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

撰写回答