2015-07-12 160 views
1

拆分操作和操作数,我的运营商:=>=<=><
我的表情是那么简单,下面的示例:如何在python

string1 = string2 
string1=string2 
string1= string2 
string1 =string2 
string1>=string2 
string1 >=string2 
string1 >= string2 
string1 <string2 
... 

我需要拆分任何的将上面的表达式分成三个单词并得到一个充满运算符和操作数的列表。例如

['string1', '>=', 'string2'] 

我试图使用re.split但没有得到合适的结果。任何意见,将不胜感激。

回答

2

你可以试试:

re.split('(\W+)', 'string1 >=string2') 

注意与周围的括号将\W+保持你根据分裂文字。

如果你想具体和只分割给定的字符串,你可以列出它们,并建立一个正则表达式,分别为|

+0

谢谢。它返回'['string1','> =','string2']'。是否有可能得到'['string1','> =','string2']'(修饰词)? – Meysam

+0

@Meysam'[x.strip('')for x in re.split ...]' – Maroun

+0

@Meysam或者你可以使用'map(str.strip,re.split('(\ W +)','string1 > = string2'))' – GHajba

3

这里是提取数据的代码,你可以把找到的元素在列表中,如你所愿:

import re 
lst = ['string1 = string2', 
    'string1=string2', 
    'string1= string2', 
    'string1 =string2', 
    'string1>=string2', 
    'string1 >=string2', 
    'string1 >= string2', 
    'string1 <string2'] 
pat = re.compile(r'(\w+)\s*([<>=]{1,2})\s*(\w+)') 
for e in lst : 
    matches = pat.search(e) 
    print matches.group(1), matches.group(2), matches.group(3) 

输出:

string1 = string2 
string1 = string2 
string1 = string2 
string1 = string2 
string1 >= string2 
string1 >= string2 
string1 >= string2 
string1 < string2 
+1

你的正则表达式还会匹配包含非法操作符的'string1 << string2'和'string1 <> string2'。 – martineau

+1

这是更严格:'pat = re.compile(r'(\ w +)\ s *(= | <=|> = | <|>)\ s *(\ w +)')' –

+0

谢谢您的评论。我认为输入数据是有效的。无论如何,越严格的正则表达式越好。 –

1

您可以使用re.findall

>>> import re 
>>> s = "string1>=string2" 
>>> re.findall(r'\w+|[^\s\w]+', s) 
['string1', '>=', 'string2'] 
>>> re.findall(r'\w+|[^\s\w]+', 'string1 = string2') 
['string1', '=', 'string2'] 
>>> re.findall(r'\w+|[^\s\w]+', 'string1 >= string2') 
['string1', '>=', 'string2'] 
>>> re.findall(r'\w+|[^\s\w]+', 'string1 <string2') 
['string1', '<', 'string2']