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

使用正则表达式拆分Python字符串,python,regex,Python,Regex,我需要解析一行,如下所示: foo, bar > 1.0, baz = 2.0 foo bar > 1.0 baz = 2.0 foo, bar, baz foo bar baz 对于每个元素,它可以是$string(>|您可以在每个非字母字符处拆分 re.split("[^a-zA-Z]+",input) 虽然我假设您的$string只包含字母表 您可以使用删除空结果 您可以拆分每个非字母字符 re.split("[^a-zA-Z]+",input) 虽然我假设您的

我需要解析一行,如下所示:

foo, bar > 1.0, baz = 2.0
foo  bar > 1.0  baz = 2.0
foo, bar, baz
foo  bar  baz

对于每个元素,它可以是$string(>|您可以在每个非字母字符处拆分

re.split("[^a-zA-Z]+",input)
虽然我假设您的
$string
只包含字母表


您可以使用删除空结果


您可以拆分每个非字母字符

re.split("[^a-zA-Z]+",input)
虽然我假设您的
$string
只包含字母表


您可以使用删除空结果


您可以只提取所有字母组:

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']

您可以只提取所有字母组:

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']

这一个还检查语法:

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
重新导入
打开(“输入”)作为f:
对于f中的行:
line=line.strip()
#将一行切分为以下形式的表达式:str[OP NUMBER]
exprs=re.split(r'(\w+\s*(?:[!=]=?\s*[\d.]*)?\s*,?\s*)行)
对于expr中的expr:
#将每个表达式切碎为标记,并获得str部分
令牌=re.findall(r'(\w+)\s*(?:[!=]=?\s*[\d.]*)?,?',expr)
如果令牌:打印令牌

此选项还检查语法:

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
重新导入
打开(“输入”)作为f:
对于f中的行:
line=line.strip()
#将一行切分为以下形式的表达式:str[OP NUMBER]
exprs=re.split(r'(\w+\s*(?:[!=]=?\s*[\d.]*)?\s*,?\s*)行)
对于expr中的expr:
#将每个表达式切碎为标记,并获得str部分
令牌=re.findall(r'(\w+)\s*(?:[!=]=?\s*[\d.]*)?,?',expr)
如果令牌:打印令牌

如果一行中只有
foo,bar
bar>1.0 baz=2.0
会发生什么?如果一行中只有
foo,bar
bar>1.0 baz=2.0
会发生什么?应该是
[a-zA-Z]+
也包括大写字母,否?或者使用ignorecase标志。应该是
[a-zA-Z]+
也包括大写,否?或使用ignorecase标志。这与我想要的非常接近,我的问题没有很好的描述,应该是str[OP str],str也可以包含数字,我正试图根据你的答案找出一个解决方案,非常感谢。这与我想要的非常接近,我的问题没有很好的描述,应该是str[OP str],str也可以包含数字,我正试图根据你的答案找出一个解决方案,非常感谢。