回答
您可以使用正则表达式的组来标记一个字符串:
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 –
看起来您希望我们为您编写一些代码。尽管许多用户愿意为遇险的编码人员编写代码,但他们通常只在海报已尝试自行解决问题时才提供帮助。证明这一努力的一个好方法是包含迄今为止编写的代码,示例输入(如果有的话),期望的输出和实际获得的输出(控制台输出,堆栈跟踪,编译器错误 - 无论是适用)。您提供的细节越多,您可能会收到的答案就越多。 –