2014-03-30 25 views
1

有沒有一種方法可以使用以下(無證)re.Scanner查找雙引號內的所有內容,以便將這種匹配分類爲字符串?使用RE掃描儀查找雙引號內容?

scanner = re.Scanner([ 
(r"[-10-9]+", lambda scanner, token:("INTEGER", int(token))), 
(r"[A-Za-z]+", lambda scanner, token:("NAME", str(token))), 
(r"[:true::false:]+", lambda scanner, token:("BOOL", token)), 
(r"[:error:]+", lambda scanner, token:("ERROR", token)), 
(r'.', lambda scanner, token: None), 
]) 

回答

1

你可以簡單的字符串正則表達式添加到掃描儀這樣的:

>>> import re 
>>> scanner = re.Scanner([ 
(r"[-10-9]+", lambda scanner, token:("INTEGER", int(token))), 
(r"[A-Za-z]+", lambda scanner, token:("NAME", str(token))), 
(r"[:true::false:]+", lambda scanner, token:("BOOL", token)), 
(r"[:error:]+", lambda scanner, token:("ERROR", token)), 
(r'".*?"', lambda scanner, token:("STRING", token)), # added STRING regex 
(r'.', lambda scanner, token: None), 
]) 

現在你可以測試一下:

>>> i = '"string"' # simulated input 
>>> t = '"this is a very long string with whitespace"' # another simulated input 
>>> scanner.scan(i) 
([('STRING', '"string"')], '') # ([(token_label, match)], remainder_of_string) 
>>> scanner.scan(t) 
([('STRING', '"this is a very long string with whitespace"')], '') 
+0

唔...真的不能說我有用戶輸入和我輸入「字符串」,然後將其傳遞給掃描儀,我怎麼說確定所有雙引號是一個字符串。 – user2757849

+0

是的!最後一個問題是我有辦法通過空白來讀取它嗎?所以現在它會返回「字符串」,它是一個字符串,但如果我有一個輸入說「這是一個非常長的字符串與空白」它需要每個單詞,它不是一個統一的字符串。如果這沒有任何意義mabye我可以澄清更好一點 – user2757849

+0

@ user2757849我想我明白你的意思。我假設你現在正在討論'NAME'正規表達式。請注意上面的編輯。 –