2016-11-25 62 views
0

我需要建立在python正则表达式,我需要提取字符串排除一个字在字符串

的完全匹配对于实施例的值:

record 

LDL PRODUCTNAME 5.0,PRODUCTNAME 65.6,HDL PRODUCTNAME 34.1 

我在哪里只需要提取必须提取的PRODUCTNAME的值(即65.6),而不应从记录中提取其他参数(如LDL PRODUCTNAME和HDL PRODUCTNAME)。

但是,当我使用下面的正则表达式来查找值CHOLESTROL我得到所有values(i.e, 5.0 65.6 34.1),因为它找到匹配CHOLESTEROL

Regex: Value=^\(?!HDL\s|LDL\)(PRODUCTNAME\d{1}\.\d{1})+$ 

回答

0

为什么不

/,PRODUCTNAME (\d+(?:\.\d+)?),/ 
+0

它仍然会产生相同的结果。 – Prajwal

+0

什么?与领先的“,”? 'LDL PRODUCTNAME'不能匹配(除非“,”是python中的一些特殊字符,那么你需要转义它) – Fallenhero

+0

见https://regex101.com/r/LOf0sK/1 – Fallenhero

1

您可以使用split

s = 'LDL PRODUCTNAME 5.0,PRODUCTNAME 65.6,HDL PRODUCTNAME 34.1' 

params = dict([item.rsplit(' ', 1) for item in s.split(',')]) 
print params.get('PRODUCTNAME') 
0

用下面的方法,你可以使用或不提取某些产品的参数前缀(LDL|HDL)

drug_str = 'LDL CHOLESTEROL 5.0,DIMEDROL 65.6,HDL SEMISTEROL 34.1' 
search_drug = 'DIMEDROL' 
result = re.search(r'(LDL|HDL)?\s?'+ re.escape(search_drug) + r' ([\d.]+)\b', drug_str) 

print(result.group(2)) 

输出:

65.6 
0

看看这个

import re 
strg = 'LDL PRODUCTNAME 5.0,PRODUCTNAME 65.6,HDL PRODUCTNAME 34.1' 
match = re.findall(r'((?!PRODUCTNAME\s)\d*\.\d*(?!,)?)', strg) 

print ','.join(match) 

import re 
strg = 'LDL PRODUCTNAME 5.0,PRODUCTNAME 65.6,HDL PRODUCTNAME 34.1' 
Productname = 'PRODUCTNAME' 
match = re.findall(r'' + re.escape(Productname) + ' (\d*\.\d*(?!,)?)', strg) 
output = ','.join(match) 
print "{} = {}".format(Productname,output) 
0
import re 
drug_str = 'LDL CHOLESTEROL 5.0,DIMEDROL 65.6,HDL SEMISTEROL 34.1' 
search_drug = 'DIMEDROL' 
result = re.search(re.escape(search_drug) + r' ([\d.]+)\b', drug_str) 
result.group(1) 
相关问题