我需要解析这样的一行:
foo, bar > 1.0, baz = 2.0
foo bar > 1.0 baz = 2.0
foo, bar, baz
foo bar baz
对于每个元素,它可以是$ string(> |< |< = |> = | =)$ num或只是$ string,separator','在元素之间是可选的。
在所有这些情况下,将它们识别为:
['foo', 'bar', 'baz']
我怎么能在python中做到这一点?
答案 0 :(得分:3)
您可以分割每个非字母字符
re.split("[^a-zA-Z]+",input)
虽然我假设你的$string
只包含字母..
您可以使用filter
删除空结果filter(None, str_list)
答案 1 :(得分:2)
您可以提取所有字母组:
s = """
foo, bar > 1.0, baz = 2.0
foo bar > 1.0 baz = 2.0
foo, bar, baz
foo bar baz
"""
import re
regex = re.compile(r'([a-z]+)', re.I) # re.I (ignore case flag)
for line in s.splitlines():
if not line:
continue # skip empty lines
print regex.findall(line)
>>>
['foo', 'bar', 'baz']
['foo', 'bar', 'baz']
['foo', 'bar', 'baz']
['foo', 'bar', 'baz']
答案 2 :(得分:0)
这个也检查语法:
import re
with open("input") as f:
for line in f:
line = line.strip()
# chop a line into expressions of the form: str [OP NUMBER]
exprs = re.split(r'(\w+\s*(?:[!<>=]=?\s*[\d.]*)?\s*,?\s*)', line)
for expr in exprs:
# chop each expression into tokens and get the str part
tokens = re.findall(r'(\w+)\s*(?:[!<>=]=?\s*[\d.]*)?,?', expr)
if tokens: print tokens