Python 正则表达式-检查以“开始”开头的字符串中的单词;“什么?”;

Python 正则表达式-检查以“开始”开头的字符串中的单词;“什么?”;,python,regex,python-3.x,Python,Regex,Python 3.x,我将以下USER\u AGENT头作为字符串 “Mozilla/5.0(Macintosh;英特尔Mac OS X 10_12_5)AppleWebKit/603.2.4(KHTML,类似Gecko)版本/10.1.1 Safari/603.2.4” 我想在这个字符串中搜索任何以“Version”开头的单词,但我也想抓住它所属的整个“单词”——因此,在这个例子中,我们有“Version/10.1.1”。我目前的正则表达式查找只是返回“版本”…所以任何专业正则表达式的提示都会很好 以下是我的尝试代

我将以下USER\u AGENT头作为字符串

“Mozilla/5.0(Macintosh;英特尔Mac OS X 10_12_5)AppleWebKit/603.2.4(KHTML,类似Gecko)版本/10.1.1 Safari/603.2.4”

我想在这个字符串中搜索任何以“Version”开头的单词,但我也想抓住它所属的整个“单词”——因此,在这个例子中,我们有“Version/10.1.1”。我目前的正则表达式查找只是返回“版本”…所以任何专业正则表达式的提示都会很好

以下是我的尝试代码:

import re

http_user_agent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/603.2.4 (KHTML, like Gecko) Version/10.1.1 Safari/603.2.4"

if 'Safari' in http_user_agent and 'Mobile' not in http_user_agent:
    version = re.compile(r'\b({0}).*?'.format('Version'), flags=re.IGNORECASE).search(http_user_agent)
    print(version.group(0))
version.group(0)的打印当前仅为“版本”…帮助

这个正则表达式可以工作,但感觉有点懒:

(Version.*? )

模式末尾的惰性
*?
始终匹配空字符串,您可以安全地将其从模式中删除,而是添加匹配0个或更多字符(除空格字符外)的
\S*
模式:

version = re.compile(r'\b{0}\S*'.format('Version'), flags=re.IGNORECASE).search(http_user_agent)
                              ^^^
请参见作为输出的
版本/10.1.1

注意,
Version
周围不需要捕获组,因此我还建议从模式中删除捕获括号

请注意,您可以使用以下命令将图案精确到只匹配
版本
,后跟
/
和点分隔数字

re.compile(r'\b{0}/\d+(?:\.\d+)*'.format('Version'), flags=re.IGNORECASE)
看到了吗

详细信息

  • \b
    -单词边界
  • 版本
    -文字子字符串
  • /
    -a
    /
    字符
  • \d+
    -1+位
  • (?:\。\d+)*
    -一个非捕获组,匹配0个或多个重复(由于末尾的
    *
    • \。
      -一个点
    • \d+
      -1+位

模式末尾的惰性
*?
始终匹配空字符串,您可以安全地将其从模式中删除,而是添加匹配0个或更多字符(除空格字符外)的
\S*
模式:

version = re.compile(r'\b{0}\S*'.format('Version'), flags=re.IGNORECASE).search(http_user_agent)
                              ^^^
请参见作为输出的
版本/10.1.1

注意,
Version
周围不需要捕获组,因此我还建议从模式中删除捕获括号

请注意,您可以使用以下命令将图案精确到只匹配
版本
,后跟
/
和点分隔数字

re.compile(r'\b{0}/\d+(?:\.\d+)*'.format('Version'), flags=re.IGNORECASE)
看到了吗

详细信息

  • \b
    -单词边界
  • 版本
    -文字子字符串
  • /
    -a
    /
    字符
  • \d+
    -1+位
  • (?:\。\d+)*
    -一个非捕获组,匹配0个或多个重复(由于末尾的
    *
    • \。
      -一个点
    • \d+
      -1+位
使用以下方法:

import re

http_user_agent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/603.2.4 (KHTML, like Gecko) Version/10.1.1 Safari/603.2.4"

if 'Safari' in http_user_agent and 'Mobile' not in http_user_agent:
    version = re.compile(r'\b({0}).*?'.format('Version[/\.\d]*\s'), flags=re.IGNORECASE).search(http_user_agent)
    print(version.group(0))
在这里,我们将regex
Version
更改为
Version[/\.\d]*\s
以包括数字“.”和“/”直到空格字符。

使用以下命令:-

import re

http_user_agent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/603.2.4 (KHTML, like Gecko) Version/10.1.1 Safari/603.2.4"

if 'Safari' in http_user_agent and 'Mobile' not in http_user_agent:
    version = re.compile(r'\b({0}).*?'.format('Version[/\.\d]*\s'), flags=re.IGNORECASE).search(http_user_agent)
    print(version.group(0))
在这里,我们将regex
Version
更改为
Version[/\.\d]*\s
以包括数字“.”和“/”直到空格字符