我正在编写一个表达式,它将在python中搜索某些文本。
我尝试了在线pythex编辑器,但是python中的相同表达式不起作用
表达:
find_id = re.compile(r'^identifier\s*=\s*(\[\s*.*\s*\]|[\d*]|"\w*"|None)+', re.M)
text :
identifier = None
identifier=None
identifier = None ,
identifier = None,
identifier = None ,
identifier = None)
identifier = None ,)
identifier = 35)
identifier = ["U1", "U2", "U3"])
identifier = "some_String",
identifier = [112, 113, 114])
identifier = [212, 213, 214] )
identifier = [312, 313, 314], )
identifier = [412, 413, 414] , )
上面提到的标识符行中有许多不同的可能性。它可以是上述任何一种可能性。
在解析时,我只需要标识符值(python数据类型),删除","
或")"
或任何其他字符。
我是正则表达式的初学者,不确定我是否需要+
,但在检查pythex在线编辑器时,我发现它得到了正确的结果。
请帮我确定我在哪里犯了错误。
答案 0 :(得分:1)
标志re.MULTILINE
是必要的
import re
s = '''one line
identifier = None ,) and
another line'''
pat = '^identifier\s*=\s*(None)+'
m = re.search(pat,s)
try:
gr = m.group(1)
print gr,type(gr)
except:
print '--No match has been found--'
print '---------------------------'
m = re.search(pat,s,re.M)
try:
gr = m.group(1)
print gr,type(gr)
except:
print '--No match has been found--'
结果
--No match has been found--
---------------------------
None <type 'str'>
答案 1 :(得分:-1)
尝试:
^identifier\s*=\s*(None).*$