回答
您可以使用正則表達式的組來標記一個字符串:
import re
tokens = (
('STRING', re.compile('"[^"]+"')), # longest match
('ID', re.compile('[a-zA-Z_]+')),
('SPACE', re.compile('\s+')),
('DIGIT', re.compile('\d+')),
)
def tokenizer(s):
i = 0
lexeme = []
while i < len(s):
match = False
for token, regex in tokens:
result = regex.match(s, i)
if result:
lexeme.append((token, result.group(0)))
i = result.end()
match = True
break
if not match:
raise Exception('lexical error at {0}'.format(i))
return lexeme
以字符串abcd xvc 23432 "exampe" 366
:
for i in tokenizer('abcd xvc 23432 "exampe" 366'):
print i
打印:
('ID', 'abcd')
('SPACE', ' ')
('ID', 'xvc')
('SPACE', ' ')
('DIGIT', '23432')
('SPACE', ' ')
('STRING', '"exampe"')
('SPACE', ' ')
('DIGIT', '366')
是的!這實際上是我在尋找的感謝! –
如果我想在嘗試添加之前檢查令牌的類型讓我們說什麼。你是怎樣做的? @BSH –
@MannyO'isinstance(obj,type)'如果'obj'在任何地方繼承'type',則返回'True'。備選地,只是檢查第一索引在'i'(例如'I [0]'),並檢查其對' 「ID」',' 「SPACE」',' 「DIGIT」',或' 「STRING」' –
使用拆分拆分它分割字符串
str.split()
是的,但讓我們說有一個在那裏的數字,我怎麼單獨指定它作爲一個數字之前推它到堆棧@Amit –
> "Hey my name is Jon".split() -
['Hey', 'my', 'name', 'is', 'Jon']
將是簡單的答案。如果您有更復雜的令牌概念(例如,「Jon!」是1或2個令牌),請使用re.findall
。
> re.findall(r'(\d+)|(\w+)', 'Jon is 10 years old')
[('', 'Jon'), ('', 'is'), ('10', ''), ('', 'years'), ('', 'old')]
請注意,這會將數字放在每個元組左側和其他字符串的右側。這將做其他事情,你可能沒有預料
> re.findall(r'(\d+)|(\w+)', 'Hi-yoo')
[('', 'Hi'), ('', 'yoo')]
查找一個很好的正則表達式教程瞭解更多。
是的,但讓我們說有一個數字在那裏,如何在將它推入堆棧之前,我將它單獨指定爲一個數字@ U2EF1 –
@MannyO可能類似'[int(token)if token.isdigit()else user_input.split()]中的標記' –
@MannyO什麼adsmith說,如果這變得越來越複雜,請查看如何使用正則表達式組。 – U2EF1
您可以使用str.split()
做到這一點,但是刪除了空格。如果您想保留空間,請使用list(str)
。
- 1. 令牌化C中的用戶輸入(存儲在** arg中)?
- 2. 從getline令牌化輸入
- 3. 令牌化execvp()中的用戶輸入c
- 4. 在Python中進行令牌化
- 5. 如何使用「輸入」在C中分隔輸入令牌?
- 6. 在jquery令牌輸入中創建令牌
- 7. jquery/javascript令牌輸入
- 8. jQuery的令牌輸入
- 9. 令牌化和dtMatrix在python與nltk
- 10. 用戶訪問令牌,誤格式化
- 11. 如何在python下載json時輸入令牌?
- 12. 需要在jQuery的令牌輸入
- 13. 在Python中解析用戶輸入
- 14. 在python中翻譯用戶輸入
- 15. 與用戶令牌
- 16. 我需要用戶輸入把日期放在令牌(/)被自動放入
- 17. 在Yii2控制檯命令中輸入用戶輸入
- 18. 在python中用二進制搜索樹輸入用戶輸入
- 19. 在python中使用訪問令牌的Twitter帳戶認證
- 20. 如何添加尚未包含在令牌輸入中的新令牌
- 21. 易趣用戶令牌永久(取用戶令牌API)?
- 22. 令牌輸入在rails中不起作用
- 23. Java:通過輸入字符串的令牌讀取令牌
- 24. 殼牌用戶輸入長度限制
- 25. 令牌化大量的python文本
- 26. 令牌化和統計令牌
- 27. python - 定時用戶輸入
- 28. Python-多用戶輸入
- 29. 的Python:從用戶輸入
- 30. Python用戶輸入平均
你只是在尋找'str.split()'? – cmd
類似的東西,但我希望它看起來像一個樣子,所以在每個實例Tok將具有字符串中的字符的值。例如:當令牌不爲空時,將該值推送到堆棧@cmd –
看起來您希望我們爲您編寫一些代碼。儘管許多用戶願意爲遇險的編碼人員編寫代碼,但他們通常只在海報已嘗試自行解決問題時才提供幫助。證明這一努力的一個好方法是包含迄今爲止編寫的代碼,示例輸入(如果有的話),期望的輸出和實際獲得的輸出(控制檯輸出,堆棧跟蹤,編譯器錯誤 - 無論是適用)。您提供的細節越多,您可能會收到的答案就越多。 –