回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>给定这样的字符串:</p>
<pre><code>>>> s = "X/NOUN/dobj>_hold/VERB/ROOT_<membership/NOUN/dobj_<with/ADP/prep_<Y/PROPN/pobj_>,/PUNCT/punct"
</code></pre>
<p>首先我想用下划线分割字符串,即:</p>
<pre><code>>>> s.split('_')
['X/NOUN/dobj>',
'hold/VERB/ROOT',
'<membership/NOUN/dobj',
'<with/ADP/prep',
'<Y/PROPN/pobj',
'>,/PUNCT/punct']
</code></pre>
<p>我们假设下划线仅用作分隔符,并且从不作为要提取的子字符串的一部分存在。你知道吗</p>
<p>然后,我需要首先检查上述拆分列表中的每个“节点”是否以“>;”、“<;”开头或结尾,然后将其移除,并将相应的方括号作为子列表的结尾,例如:</p>
<pre><code>result = []
nodes = s.split('_')
for node in nodes:
if node.endswith('>'):
result.append( node[:-1].split('/') + ['>'] )
elif node.startswith('>'):
result.append( node[1:].split('/') + ['>'] )
elif node.startswith('<'):
result.append( node[1:].split('/') + ['<'] )
elif node.endswith('<'):
result.append( node[:-1].split('/') + ['<'] )
else:
result.append( node.split('/') + ['-'] )
</code></pre>
<p>如果它不是以尖括号开始,那么我们将<code>-</code>附加到子列表的末尾。你知道吗</p>
<p>[输出]:</p>
<pre><code>[['X', 'NOUN', 'dobj', '>'],
['hold', 'VERB', 'ROOT', '-'],
['membership', 'NOUN', 'dobj', '<'],
['with', 'ADP', 'prep', '<'],
['Y', 'PROPN', 'pobj', '<'],
[',', 'PUNCT', 'punct', '>']]
</code></pre>
<p><strong>给定原始输入字符串,是否有一种不那么冗长的方法来获得结果?也许是正则表达式和组?</strong></p>