[英]Get particular information from a string
我想在Python中使用RegEx從fstr獲取name的值。 我嘗試如下,但找不到預期的結果。
任何幫助將不勝感激。
fstr = "MCode=1,FCode=1,Name=XYZ,Extra=whatever" #",Extra=whatever" this portion is optional
myobj = re.search( r'(.*?),Name(.*?),*(.*)', fstr, re.M|re.I)
print(myobj.group(2))
您可能不相信,但實際問題是正則表達式中的,*
。 它使匹配,
可選的。 因此,正則表達式中的第二個捕獲組不匹配任何內容( .*?
表示零到無限制之間的匹配,並且延遲進行匹配),並檢查下一個項目,*
,也表示match ,
零次或多次。 因此它匹配零次,最后捕獲組匹配字符串的其余部分。
如果要修復RegEx,只需在逗號后刪除*
,就像這樣
myobj = re.search( r'(.*?),Name(.*?),(.*)', fstr, re.I)
print(myobj.group(2))
# =XYZ
但是,正如其他答案所示,您不必創建其他捕獲組。
順便說一句,我喜歡僅在特別需要時才使用RegEx。 在這種情況下,如果沒有RegEx,我會像這樣解決它
fstr = "MCode=1,FCode=1,Name=XYZ,Extra=whatever"
d = dict(item.split("=") for item in fstr.split(","))
# {'FCode': '1', 'Extra': 'whatever', 'Name': 'XYZ', 'MCode': '1'}
現在,我已經掌握了所有信息,可以像這樣訪問它們
print d["Name"]
# XYZ
簡單吧? :-)
編輯:如果要對一百萬條記錄使用相同的正則表達式,則可以通過預編譯RegEx來稍微提高性能,如下所示
import re
pattern = re.compile(r"Name=([^,]+)", re.I)
match = re.search(pattern, data)
if match:
match.group(1)
您可以按照以下步驟進行操作:
import re
fstr = "MCode=1,FCode=1,Name=XYZ,Extra=whatever"
myobj = re.search( r'Name=([^,]+)', fstr, re.M|re.I)
>>> print myobj.group(1)
XYZ
試試吧
rule = re.compile(r"Name=(?P<Name>\w*),")
res = rule.search(fstr)
res.group("Name")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.