2

HTML ファイル内の文字列の一部を分離する必要があります。成功できると思ったのですが、データ構造が本当にカオスです。私は非常に初心者なので、正規表現はおそらく悪い考えでした。コンマまたはセミコロンは一貫しておらず、区切り文字として選択できませんでした。いずれにせよ、私が何をしたか、例から始めましょう。それが変数に入れられたhtmlであるとします

例 = d1 d2 いくつかのもの いくつかのもの いくつかのもの d3 d4 d5 いくつかのもの

区切り文字が一貫していれば、次のスクリプトを使用して、興味のある「いくつかのもの」を復元できます。

for url in open("url-repository.csv", "rt").readlines():
    variable1 = urllib2.urlopen(url[:-1]).read()
    a = re.compile('d1(.*?)\"d2')
    b = a.search(vqriable1)
    if b:
        c = b.group(1)
        list_of_d1.append(c)

しかし、区切り文字は、分析する必要があるさまざまなページで常に同じではなく、常に同じ順序でもありません。

例 2 = d2 あるもの d3何もないd4 あるもの d5

そこで、2点お聞きします。HTMLページで見つけたすべての区切り記号のリストを作成するとします。

Delimiters_list = [d1, d2, d3]

1 スクリプトが可能なすべての構成 (d1 + d2、d2 + d6、dn + dn など) を確実に検索するようにすることは可能ですか?

2 または少なくとも、最初の用語を示し、スクリプトが、一致したリストの最初の用語へのチェーンの選択を停止するようにしますか?

これは私にとって非常に難しい問題です。不明確である可能性があることは承知していますが、調査して助けようとしてくれた方々に事前に感謝します。

4

2 に答える 2

0

次のPythonの例で、問題が解決するはずです。

dels = [d1, d2, d3]
combs = []
for d1 in dels:
    for d2 in dels:
        combs.append(re.compile(d1 + '(.*?)\"' + d2)
for comb in combs:
    check_for_matches(comb, string)

お役に立てば幸いです。

于 2012-06-19T14:18:59.670 に答える
0

交互演算子を使用すれば、問題は難しくありません|

    (d1|d2|d3|d4|d25)(.*?)(?=d1|d2|d3|d4|d25)

こちらです、

  1. 必要に応じて、グループ1で開始区切り文字をキャプチャします。
  2. グループ2の「いくつかのもの」を貪欲にキャプチャしません。
  3. また、先読みアサーションを使用することで、次の区切り文字をまだ「使い果たす」ことがないため、残りのデータを同じ正規表現と照合し続けることができます。

ここでこの正規表現のデモを参照してください:http://rubular.com/r/DJVegfD3Ul

注:残念ながら、私はPythonを知らないので、コードを書き込もうとはしません。ただし、すべての区切り文字を上記のフォームに結合するのは簡単な作業です。以下のコメントの警告を参照してください。

アップデート

Pythonを書くのはこれが初めてなので、間違いを許してください。

    # start with an array of delimeters
    delimeters = [d1, d2, d3]

    # start with a blank string
    regex_delim = ''

    # build the "delimiters regex" using alternation
    for delimeter in delimeters:
        regex_delim += re.escape(delimeter) + '|'

    # remove the extra '|' at the end
    regex_delim = regex_delim[:-1]

    # compile the regex
    regex_obj = re.compile('(' + regex_delim + ')(.*?)(?=' + regex_delim + ')')

    # and that should be it!
    for match in regex_obj.finditer(html_str):
        print match.group(2)

re.escape(delimiter)区切り文字に特殊文字が含まれている場合に必要です。たとえば、区切り文字がであった場合は*、をre.escape(...)返します\*。これにより、区切り文字は正規表現の数量詞として変換されません。

于 2012-06-19T15:15:48.453 に答える