我用Python编写解析器。为此,我使用正则表达式。但在这里有必要消除一个等号。
_PIN_PATTERN = '(^[a-zA-Z]+[0-9]*[:]?[a-zA-Z0-9]*)'
_ATTRIBUTE_PATTERN = '(^[a-zA-Z0-9_]+[0-9]*(\s)*[=](\s)*[a-z0-9.-]+)'
在这种情况下,_PIN_PATTERN
和_ATTRIBUTE_PATTERN
会返回相同的值,例如('ATTRIBUTE', 'ad = 0.013p')
('PIN', 'ad = 0.013p')
。但是_PIN_PATTERN
不应该返回('PIN', 'ad = 0.013p')
,它应该返回类似('PIN', 'VSS:F85')
的内容,即没有等号。
我的代码的一部分
def _is_pin(self, s):
a = re.match(self._PIN_PATTERN, s)
e = re.match(r'=', s)
if a and not e:
return True
else:
return False
答案 0 :(得分:0)
你在寻找这样的东西:
_ATTRIBUTE_PATTERN = r'[\w_]+\s*=\s*[\w\.\-]+' # matches ad = 0.013p
# _ATTRIBUTE_PATTERN = r'[^=]+=[^=]+' # matches string containing '='
_PIN_PATTERN = r'\w+\s*:\s*\w+' # matches VSS:F85
# _PIN_PATTERN = r'[^=]+' # if you want to match any string which does not contain '=' char