您可以使用正則表達式來分解零件。我在第二步中刪除了空格以防止正則表達式看起來太糟糕。
import re
tests = ["VBD -> 'RATTLED'", "PP -> CC PP|<PP-LOC-CC-PP>"]
# use positive lookahead to find everything before ->,
# then everything between -> and (optional) |
# and everything after |
split_re = re.compile(r"(.*(?=->))->([^|]+)\|?(.*)?")
def parse(txt):
# pull out the values then strip any surrounding whitespace
return (t.strip() for t in split_re.match(txt).groups())
for test in tests:
a, b, c = parse(test)
print a,b,c
一個更復雜的正則表達式可以讓你跳過一個單獨的步驟剝離值,在可讀性的損失:
split_re = re.compile(r"\s*(.*(?=\s*->))\s*->\s*(.*(?=\s*(?:\|)?)+)\s*\|?\s*(.*)?")
for test in tests:
a, b, c = split_re.match(test).group()
print a,b,c
它不會趕上RHS的兩個部分在第二圖案! – sabzdarsabz 2014-11-14 20:39:10
@sabzdarsabz好吧,我認爲可能是LHS和RHS,你的意思是「左手邊」和「右手邊」?這對我來說有點令人困惑,我不確定人們會立即得到這些信息,特別是考慮到你解析的文本如何非常密集和混亂。 – furkle 2014-11-14 20:41:40
@sabzdarsabz我假設你的意思是「兩部分」是指由管道分開的兩部分?如果是這樣,我已經更新了它,以便它可以工作。 – furkle 2014-11-14 20:48:38