有沒有相當於ruby's StringScanner class的python類?我可以一起破解一些東西,但是如果已經存在,我不想重新發明輪子。python等價於ruby的StringScanner?
2
A
回答
1
看起來像re.split(pattern, string)
的變體。
0
您是否正在Python中尋找正則表達式?檢查此鏈接來自官方的文檔:
-1
也許看看內置的模塊tokenize。看起來您可以使用StringIO module將字符串傳遞給它。
9
import re
def s_ident(scanner, token): return token
def s_operator(scanner, token): return "op%s" % token
def s_float(scanner, token): return float(token)
def s_int(scanner, token): return int(token)
scanner = re.Scanner([
(r"[a-zA-Z_]\w*", s_ident),
(r"\d+\.\d*", s_float),
(r"\d+", s_int),
(r"=|\+|-|\*|/", s_operator),
(r"\s+", None),
])
print scanner.scan("sum = 3*foo + 312.50 + bar")
繼它看起來就像是在爲實驗代碼/起點爲別人留下的discussion。
4
在Python中沒有什麼和Ruby的StringScanner一模一樣。當然,容易把東西在一起:
import re
class Scanner(object):
def __init__(self, s):
self.s = s
self.offset = 0
def eos(self):
return self.offset == len(self.s)
def scan(self, pattern, flags=0):
if isinstance(pattern, basestring):
pattern = re.compile(pattern, flags)
match = pattern.match(self.s, self.offset)
if match is not None:
self.offset = match.end()
return match.group(0)
return None
隨着交互使用它的一個例子
>>> s = Scanner("Hello there!")
>>> s.scan(r"\w+")
'Hello'
>>> s.scan(r"\s+")
' '
>>> s.scan(r"\w+")
'there'
>>> s.eos()
False
>>> s.scan(r".*")
'!'
>>> s.eos()
True
>>>
但是,我做我往往只寫一次過那些正則表達式的工作並使用組提取所需的字段。或者對於更復雜的事情,我會寫一個一次性的標記器,或者尋找PyParsing或PLY來爲我標記。我沒有看到自己使用類似StringScanner的東西。
0
今天有馬克瓦克森一個項目,在Python實現StringScanner:
http://asgaard.co.uk/p/Python-StringScanner
1
https://pypi.python.org/pypi/scanner/
似乎是一種更維護和功能的完整解決方案。但它直接使用oniguruma。
相關問題
- 1. python等價於ruby的__method__?
- 2. Ruby等價於Python的DictWriter?
- 3. python等價於ruby的`map.with_index`?
- 4. python等價於ruby bundler包
- 5. Python等價於Ruby的包函數
- 6. Python中的「require」(Ruby)等價於什麼?
- 7. fromCharCode等價於Ruby
- 8. charCodeAt()等價於Ruby
- 9. Python的等價Ruby的'method_missing'
- 10. Ruby的等價的Python setattr()
- 11. Ruby ::等價於Tie :: FIle?
- 12. PL/Ruby等價於MySQL
- 13. Python等價於bwmorph
- 14. Python等價於ignoreboth:erasedups
- 15. python等價於MATLAB的mxCreateDoubleMatrix
- 16. 等價於python「dir」的Java?
- 17. Python等價於Mathematica的ArrayPlot?
- 18. Python等價於Mathematica的「LaguerreL」
- 19. Perl的等價於python exec?
- 20. C#等價於python的struct.pack
- 21. C++等價於Python的doctests?
- 22. python等價於MySQL的IFNULL
- 23. PHP等價於Python的requests.get
- 24. C#等價於Python的os.path.exists()?
- 25. Python的for Ruby的等價物
- 26. Python的等價物Ruby的each_slice(count)
- 27. Python的延續與Ruby的等價物
- 28. Ruby的等價的Python str [3:]
- 29. 是否有「python -i」的ruby等價物?
- 30. Ruby的watchr在Python中等價嗎?
有趣,謝謝! – 2009-11-17 21:54:23