我有多个字符串,看起来像这样
product: green apples price: 2.0 country: france company: somecompany
。某些字符串可能包含较少的字段例如,一些人缺少公司名称或国家等。我试图仅提取价值并跳过产品,价格,国家,公司。我试图创建多个正则表达式,从每个字符串的左侧开始。
blah="product: green apples price: 2.0 country: france company: somecompany"
product_reg = re.compile(r'.*?\bproduct\b:(.*).*')
product_reg_strip = re.compile(r'(.*?)\s[a-z]:?')
product_full=re.findall(product_reg, blah)
prod=re.find(product_reg_strip, str(product_full))
print prod
price_reg = re.compile(r'.*?\bprice\b:(.*).*')
price_reg_strip = re.compile(r'(.*?)\s[a-z]:?')
price_full=re.findall(price_reg, blah)
price=re.find(price_reg_strip, str(price_full))
print price
但这不起作用。我该怎么做才能使这个正则表达式更加清晰?
答案 0 :(得分:1)
您只需使用正则表达式并获取命名组结果即可。 你也可以拥有或不是你所要求的所有值,正则表达式在所有情况下都可以正常工作。 尝试在regex101.com上使用此全局多行regexp https://regex101.com/r/iccVUv/1/:
^(?:product:(?P<product>.*?))(?:price:(?P<price>.*?))?(?:country:(?P<country>.*?))?(?:company:(?P<company>.*))?$
在python中你可以这样做:
pattern = '^(?:product:(?P<product>.*?))(?:price:(?P<price>.*?))?(?:country:(?P<country>.*?))?(?:company:(?P<company>.*))?$'
matches = re.search(pattern, 'product: green apples price: 2.0 country: italy company: italian company')
现在您可以使用以下方式获取数据:
product = matches.group('product')
您最终只需检查匹配是否满足并修剪空格,如:
if matches1.group('product') is not None:
product = matches.group('product').strip()
答案 1 :(得分:0)
您可以像这样拆分字符串:
str = "product: green apples price: 2.0 country: france company: somecompany"
p = re.compile(r'(\w+:)')
res = p.split(str)
print res
for i in range(len(res)):
if (i%2):
print res[i],' ==> ',res[i+1]
<强>输出:强>
['', 'product:', ' green apples ', 'price:', ' 2.0 ', 'country:', ' france ', 'company:', ' somecompany']
product: ==> green apples
price: ==> 2.0
country: ==> france
company: ==> somecompany
答案 2 :(得分:0)
我并不完全确定你的目标是什么,但是如果你要删除的东西是单个单词后跟冒号,那么正则表达式就很容易了。以下是几个样本。
>>> import re
>>> blah="product: green apples price: 2.0 country: france company: somecompany"
>>> re.sub(r'\w+: ?', '', blah)
'green apples 2.0 france somecompany'
>>> re.split(r'\w+: ?', blah)[1:]
['green apples ', '2.0 ', 'france ', 'somecompany']