Regex 如何在python中查找字符串中的精确单词
我有以下格式的字符串列表: 目标:Regex 如何在python中查找字符串中的精确单词,regex,python-3.x,Regex,Python 3.x,我有以下格式的字符串列表: 目标: 'TLS 1.2 x67 DHE-RSA-AES128-SHA256 DH 2048 AES128 TLS_DHE_RSA_WITH_AES_128_CBC_SHA256' 'TLS 1 x67 DHE-RSA-AES128-SHA256 DH 2048 AES128 TLS_DHE_RSA_WITH_AES_128_CBC_SHA256' 'TLS 1.1 x67 DHE-RSA-AES128-SHA256 DH 2048 AES128 TLS_DHE_
'TLS 1.2 x67 DHE-RSA-AES128-SHA256 DH 2048 AES128 TLS_DHE_RSA_WITH_AES_128_CBC_SHA256'
'TLS 1 x67 DHE-RSA-AES128-SHA256 DH 2048 AES128 TLS_DHE_RSA_WITH_AES_128_CBC_SHA256'
'TLS 1.1 x67 DHE-RSA-AES128-SHA256 DH 2048 AES128 TLS_DHE_RSA_WITH_AES_128_CBC_SHA256'
我想知道一行中是否只存在“TLS 1”(而不是TLS 1.1或TLS 1.2)的精确匹配
我在类似的帖子中尝试了以下解决方案:
#returns all the lines including TLS 1.1, TLS 1.2 ...
lines = []
for i in target:
if re.match(r'\bTLS 1\b', i):
lines.append(i)
还尝试:
#returns nothing
lines = []
for i in target:
if re.match(r'^TLS 1$', i):
lines.append(i)
以及搜索或findall等的许多其他变体。我如何才能仅获取与给定单词完全匹配的行?Wiktor在我发布此消息之前发表了评论(这并不奇怪),但在这种情况下,精确匹配的标记实际上是
TLS 1
后面的一个空格。单词边界不够具体,因为它也会拾取像tls1.1
,这是您不想要的。因此,请尝试以下版本:
#returns all the lines including TLS 1.1, TLS 1.2 ...
lines = []
for i in target:
if re.match(r'\bTLS 1\s', i):
lines.append(i)
如果TLS
文本可能是一行中的最后一个内容,那么我们可以尝试使用以下方法:
re.match(r'\bTLS 1(?=(\s|$))', i)
Wiktor在我发布这篇文章之前发表了评论(这并不奇怪),但在本例中,精确匹配的标记实际上是
tls1
后面的空格。单词边界不够具体,因为它也会拾取像tls1.1
,这是您不想要的。因此,请尝试以下版本:
#returns all the lines including TLS 1.1, TLS 1.2 ...
lines = []
for i in target:
if re.match(r'\bTLS 1\s', i):
lines.append(i)
如果TLS
文本可能是一行中的最后一个内容,那么我们可以尝试使用以下方法:
re.match(r'\bTLS 1(?=(\s|$))', i)
<>你可以考虑以下方法。
TLS
作为一个整体,单词前面应该有一个单词边界,这样这个部分就包含在您的模式中了
如果必须在1
后面或字符串末尾有空格,则使用负前瞻(?!\S)
:r'\bTLS 1(?!\S)
更有效。当然,您也可以使用r'\bTLS 1(?:\s |$)'
。看
如果您只想确保1
之后没有数字或小数部分,请使用
r'\bTLS 1(?!\.?\d)'
这将匹配后面没有
或
+数字的TLS 1
。看
:
输出:
['TLS 1 x67 DHE-RSA-AES128-SHA256 DH 2048 AES128 TLS_DHE_RSA_WITH_AES_128_CBC_SHA256']
<>你可以考虑以下方法。
TLS
作为一个整体,单词前面应该有一个单词边界,这样这个部分就包含在您的模式中了
如果必须在1
后面或字符串末尾有空格,则使用负前瞻(?!\S)
:r'\bTLS 1(?!\S)
更有效。当然,您也可以使用r'\bTLS 1(?:\s |$)'
。看
如果您只想确保1
之后没有数字或小数部分,请使用
r'\bTLS 1(?!\.?\d)'
这将匹配后面没有
或
+数字的TLS 1
。看
:
输出:
['TLS 1 x67 DHE-RSA-AES128-SHA256 DH 2048 AES128 TLS_DHE_RSA_WITH_AES_128_CBC_SHA256']
使用
r'\bTLS 1\s'
或r'\bTLS 1(?!\s)
获得更通用的大小写,以匹配TLS 1
,后跟空格或字符串结尾。或\bTLS 1(?!\?\d)
仅在后面不跟数字或
+数字时匹配。使用r'\bTLS 1\s'
或r'\bTLS 1(?!\s)
更一般的大小写匹配TLS 1
,后跟空格或字符串结尾。或\bTLS 1(?!\.?\d)
仅在后面没有数字或
+数字时匹配。