Python 正则表达式-检查以“开始”开头的字符串中的单词;“什么?”;
我将以下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”。我目前的正则表达式查找只是返回“版本”…所以任何专业正则表达式的提示都会很好 以下是我的尝试代码: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”。我目前的正则表达式查找只是返回“版本”…所以任何专业正则表达式的提示都会很好 以下是我的尝试代
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/
字符/
-1+位\d+
-一个非捕获组,匹配0个或多个重复(由于末尾的(?:\。\d+)*
)*
-一个点\。
-1+位\d+
*?
始终匹配空字符串,您可以安全地将其从模式中删除,而是添加匹配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/
字符/
-1+位\d+
-一个非捕获组,匹配0个或多个重复(由于末尾的(?:\。\d+)*
)*
-一个点\。
-1+位\d+
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))
在这里,我们将regexVersion
更改为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))
在这里,我们将regexVersion
更改为Version[/\.\d]*\s
以包括数字“.”和“/”直到空格字符