簡體   English   中英

Python正則表達式匹配帶引號或不帶引號的字符串

[英]Python regular expression to match either a quoted or unquoted string

我試圖用Python編寫一個正則表達式,該表達式將匹配帶引號的帶空格的字符串或不帶空格的無引號的字符串。 例如,給定字符串term:foo ,結果將是foo ;給定字符串term:"foo bar" ,結果將是foo bar 到目前為止,我已經提出了以下正則表達式:

r = re.compile(r'''term:([^ "]+)|term:"([^"]+)"''')

問題在於,匹配項可以出現在group(1)group(2)因此我必須執行以下操作:

m = r.match(search_string)
term = m.group(1) or m.group(2)

有什么辦法可以一步一步完成全部操作嗎?

避免分組,而使用前瞻性/后向斷言來消除不需要的部分:

s = 'term:foo term:"foo bar" term:bar foo term:"foo term:'
re.findall(r'(?<=term:)[^" ]+|(?<=term:")[^"]+(?=")', s)

得到:

['foo', 'foo bar', 'bar']

似乎您並不是真的想要在這里re.match 您的正則表達式幾乎正確,但您分組過多。 這個怎么樣?

>>> s
('xyz term:abc 123 foo', 'foo term:"abc 123 "foo')
>>> re.findall(r'term:([^ "]+|"[^"]+")', '\n'.join(s))
['abc', '"abc 123 "']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM