图案中的python是白色空间



我正在编写一个python脚本以在这样的字符串中找到标签名称:

string='Tag Name =LIC100 State =TRUE'

如果A使用这样的表达式

re.search('Name(.*)State',string)

我得到" = lic100"。我只想得到lic100。

关于如何设置模式以消除空格和相等信号的任何建议?

这是因为您从Name到最后一个State获得了0 字符。您可以将第1组中的模式限制为非惠特空间:

import re
string='Tag Name =LIC100 State =TRUE'
m = re.search(r'Names*=(S*)',string)
if m:
    print(m.group(1))

请参阅Python Demo

模式详细信息

  • Name-字面的char序列
  • s*-0 Whitespaces
  • =-字面的=
  • (S*)-第1组捕获除whitespace以外的0 字符(或S+可用于匹配1个或更多的字符)。

最简单的解决方案可能只是在事实之后将其剥离,就像:

s = " =LIC100 "
s = s.strip('= ')
print(s)
#LIC100

如果您坚持在正则表达式中进行操作,则可以尝试以下操作:

reg = r'Name[ =]+([A-Za-z0-9]+)s+State'

您的当前正则态度失败,因为(.*)捕获了所有字符,直到State的出现为止。您可以不用捕获所有内容,而可以使用正面的lookBehind 来描述 preceeds 的内容,但不包含在您实际想要捕获的内容中。在这种情况下," name ="先于匹配,因此我们可以将其粘贴在(?<=Name =)中,然后继续捕获所有内容,直到下一个whitespace:

>>> import re
>>> s = 'Tag Name =LIC100 State =TRUE'
>>> r = re.compile("(?<=Name =)w*")
>>> print(r.search(s))
<_sre.SRE_Match object; span=(10, 16), match='LIC100'>
>>> print(r.search(s).group(0))
LIC100

遵循上面的提示,我设法找到了一个不错的解决方案。实际上,我要处理的字符串具有一些不可打印的字符。就像这个

"Tag Namex00=LIC100x00tState=TRUE"

使用LookAhead和BookBehind的概念,我找到了以下解决方案:

import re
s = 'Tag Namex00=LIC100x00tState=TRUE'
T=re.search(r'(?<=Namex00=)(.*)(?=x00tState)',s)
print(T.group(0))

这很棒的是,结果上没有任何不可打印的字符。

<_sre.SRE_Match object; span=(10, 16), match='LIC100'>

最新更新