1

ウィキペディアの参照の先頭にあることがあるアルファベット文字を取り除くのが最善でしたか?

例:From

abcdスターウォーズエピソードIII:シスの復讐(DVD)。20世紀フォックス。2005年。

スターウォーズエピソードIII:シスの復讐(DVD)。20世紀フォックス。2005年。

私はうまくいく解決策を一緒にハックしましたが、不格好なようです。私のバージョンでは、「^(?: a(?:b(?:c)?)?)?」の形式の正規表現を使用しています。それを行うための適切で迅速な方法は何ですか?

a = list('abcdefghijklmnopqrstuvwxyz')
reg = "^%s%s" % ( "".join(["(?:%s " %b for b in a]), ")?"*len(a) )
re.sub(reg, "", "a b c d Wikipedia Reference")
4

4 に答える 4

1

HTMLを処理するのではなく、Webページのテキストをコピーして貼り付ける場合、質問で述べたようないくつかの問題は避けられません。ただし、 htmllibを使用してhtml(以下に示す関連行)を処理すると、( c<sup><i><b>c</b></i></sup>に寄与する)のような項目を単位として削除できます。[編集: htmllibが非推奨になっていることがわかりました。適切な代替品はわかりませんが、HTMLParserだと思います。]

表示される行は少し似ています

^ a b c d e スターウォーズエピソード3ジョージ・ルーカス、リック・マッカラム、ロブ・コールマン、ジョン・ノール、ロジャー・ガイエットをフィーチャーしたシスDVD解説の復讐[2005]

行のhtmlソースは

<li id="cite_note-DVDcom-13"><span class="mw-cite-backlink">^ <a href="#cite_ref-DVDcom_13-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-DVDcom_13-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-DVDcom_13-2"><sup><i><b>c</b></i></sup></a> <a href="#cite_ref-DVDcom_13-3"><sup><i><b>d</b></i></sup></a> <a href="#cite_ref-DVDcom_13-4"><sup><i><b>e</b></i></sup></a></span> <span class="reference-text"><i>Star Wars: Episode III Revenge of the Sith</i> DVD commentary featuring George Lucas, Rick McCallum, Rob Coleman, John Knoll and Roger Guyett, [2005]</span></li>

于 2012-12-06T05:33:01.930 に答える
1

正規表現で文字クラスを使用するのはどうですか。

re.sub('^([a-z] )*', '', ...)

これにより、単一のアルファベット文字とそれに続く単一のスペースの先頭の出現箇所がいくつでも削除されます。

于 2012-12-06T05:11:07.537 に答える
1

私はおそらくこのようなことをするでしょう:

title = re.sub(r'^([a-z]\s)*', '', 'a b c d Wikipedia Reference')

それはあなたがそこに持っているものと同じことをします。ただし、@ joran-beasleyが指摘しているように、複雑なケースにはもっと賢いものが必要になる場合があります。

于 2012-12-06T05:12:07.713 に答える
0

タイトルの前にスペースを入れた4つの余分な文字があるというパターンに常に従っていますか?もしそうなら、あなたはこれを行うことができます:

s = "a b c d Star Wars Episode III: Revenge of the Sith (DVD). 20th Century Fox. 2005."
if all([len(x) == 1 and x.isalpha() for x in s.split()[0:4]]):
    print s[8:]
于 2012-12-06T05:19:23.690 に答える