蟒蛇RE在模式空白
问题描述:
我写一个Python脚本在这样的字符串找到标记名称:蟒蛇RE在模式空白
string='Tag Name =LIC100 State =TRUE'
如果使用这样的
re.search('Name(.*)State',string)
我得到“= LIC100”。我只想得到LIC100。
有关如何设置模式以消除空白和相等信号的任何建议?
答
按照上面的提示,我设法找到一个好的解决方案 其实,我想处理的字符串有一些不可打印的字符。正是这样的
"Tag Name\x00=LIC100\x00\tState=TRUE"
用前瞻的理念和回顾后,我发现了以下解决方案:
import re
s = 'Tag Name\x00=LIC100\x00\tState=TRUE'
T=re.search(r'(?<=Name\x00=)(.*)(?=\x00\tState)',s)
print(T.group(0))
关于这样做的好处是,结果不会对任何非打印字符。
<_sre.SRE_Match object; span=(10, 16), match='LIC100'>
答
这是因为你从Name
到最后的State
得到0+字符以外的换行符。您可能会限制在第1组的模式,只是非空格:
import re
string='Tag Name =LIC100 State =TRUE'
m = re.search(r'Name\s*=(\S*)',string)
if m:
print(m.group(1))
图案的详细资料:
-
Name
- 一个文字字符序列 -
\s*
- 0+空格 -
=
- 一个文字=
-
(\S*)
- 组1捕获0+字符而不是空格(或\S+
可用于匹配除空格以外的1个或多个字符)。
答
最简单的解决方案很可能只是剥离出来之后,其实像这样:
s = " =LIC100 "
s = s.strip('= ')
print(s)
#LIC100
如果你坚持在正则表达式中这样做,你可以尝试这样的:
reg = r'Name[ =]+([A-Za-z0-9]+)\s+State'
答
您当前的正则表达式失败,因为(.*)
捕获所有字符,直到出现State
。您可以使用积极的倒车后台来描述优先于,但未包含在您实际想要捕获的内容中,而不是捕获所有内容。在这种情况下,“NAME =” preceeds比赛,所以我们可以把它贴在向后断言为(?<=Name =)
,然后进行捕捉一切,直到下一个空白:
>>> 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
谢谢skrrgwasme。这对我很有帮助。 – Dariva
我意识到我正在处理的字符串有一些不可打印的字符。该字符串类似于'Tag Name \ x00 = LIC100 \ x00 \ tState = TRUE'。我尝试使用“T = re.search(r'(? – Dariva