使用正则表达式拆分Python字符串

时间:2013-11-17 09:17:20

标签: python regex

我需要解析这样的一行:

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中做到这一点?

3 个答案:

答案 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