【发布时间】:2016-09-12 10:45:22
【问题描述】:
我在字符串之间做一些匹配。
t1 = '[go:VB, [like:IN, [i:PR]], [to:TO], [there:RB]]'
t2 = '[A, [like:IN, [B]], [to:TO], [C]]'
t1 和 t2 的形状都是 X:Y
我称之为
X : 单词
Y : 标签
我愿意
t1 == t2
在这个例子中,如果我们说这样的话,这是可以做到的:
for i in t1:
if i.tag in (‘NN’, ‘RB’, ‘JJ’,’ VB’, PN’):
X:Y = #ANY ONE UPPER CASE VARIABLE
我不能这样做,因为它们不是列表,我不能这样做 (eval) 因为 (: ),列表中不接受。
我所做的就是我分裂 (‘ , ‘)
t1 = t1.split(',')
t2 = t2.split(',')
现在的新列表类似于:
t1 = ['[go:VB', ' [like:IN', ' [i:PR]]', ' [to:TO]', ' [there:RB]]']
t2 = ['[A', ' [like:IN', ' [B]]', ' [to:TO]', ' [C]]']
现在
t1[0] == t2[0] #return FALSE
t1[1] == t2[1] #return TRUE
t1[2] == t2[2] #return FALSE
t1[3] == t2[3] #return TRUE
t1[4] == t2[4] #return FALSE
我需要它们都返回 TRUE,即使我将变量从 (A) 更改为任何一个大写字母(例如 Z、H、X)
我想把最后一个成员放在最后一个成员之前,然后只选择标签
>>> t1[0]
'[go:VB'
# to select only the tag
>>> t1[0][-2:]
'VB' # << This is what I want
>>> t1[1]
' [like:IN'
# to select only the tag
>>> t1[1][-2:]
'IN' # << This is what I want
>>> t1[2]
' [i:PR]]'
# to select only the tag
>>> t1[1][-2:]
']]' # << This is NOT what I want
我不知道在这里做什么,但可能有一个有用的东西可以使用,但我不知道如何在这里适应它
>>> t1[0][-2:].isalpha()
True
>>> t1[1][-2:].isalpha()
True
>>> t1[2][-2:].isalpha()
False
【问题讨论】:
-
听起来您的输入数据格式非常烦人。您是否创建/维护了生成初始
t1或t2的函数?如果是这样,则应在尝试此问题之前先解决此问题。 -
t2 是从其他人那里导入的。 t1 差不多是这样,但它曾经有元组,我删除了它们。
标签: python list python-2.7 pattern-matching match