使用正则表达式拆分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也可以包含数字,我正试图根据你的答案找出一个解决方案,非常感谢。