我寫一個Python腳本在這樣的字符串找到標記名稱:蟒蛇RE在模式空白
string='Tag Name =LIC100 State =TRUE'
如果使用這樣的
re.search('Name(.*)State',string)
我得到「= LIC100」。我只想得到LIC100。
有關如何設置模式以消除空白和相等信號的任何建議?
我寫一個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'(?<= Name \ x00 =)\ x00 *',s)」,但它返回<_sre.SRE_Match對象; span =(10,10),match =''> – Dariva