1

Python を使用して文字列を小さなセグメントに分割しようとしています。
str1 = "Hello world. これは理想的な文字列の例です。"
結果: こんにちは。
これは理想的な文字列の例です。

str2 = " <H1>Hello world.</H1><P>これは HTML のサンプル文字列です。<P>"
結果:
<H1>Hello world. </H1>
<P>これは HTML のサンプル文字列です。<P>

str3 = "1. Hello World。2. これは文字列です。"
結果:
1. ハローワールド。
2. これは文字列です。

これが私のコードです。しかし、2番目のケースを達成できないようです:

import re

string = """<h1>This is a string.</h1><a href="www.abc.com"> This is another part. <P/>"""

segment_regex = re.compile(r"""
    (
        \r\n|
        \\r\\n|
        \n|
        \\n|
        \r|
        \\r|
        \t|
        \\t|
        (?:
            (?<=[^\d][\.|\!|\?])
            \s+
            (?=[A-Z0-9])
        )|
        (?:
            (?<=[\.|\!|\?])\s*(?=<.*?>)
        )
    )
    """, re.VERBOSE)
seg = segment_regex.split(string)
segments = seg[::2]
separator = seg[1::2]

print("Segments are ---->>")
for s in segments:
    print (s)

print("Separators are ---->>")
for p in separator:
    print (p)
4

1 に答える 1

1

正規表現が一度に多くのことを行おうとしている可能性があります。より簡単で管理しやすい方法は、最初に文字列型 html、ideal、list を最初に検出し、次にそれぞれに適切なプロセッサを呼び出すことです。何かのようなもの :-

import re

string = """<h1>This is a string.</h1><a href="www.abc.com"> This is another part. <P/>"""
if re.search('<.*?>', string):
    split_html(string)
elif re.search('\\d\\.', string):
    split_list(string)
else:
    split_ideal(string)

また、これは前述のケースで機能する可能性がありますが、一般的な「スプリッター」ははるかに複雑になるため、このアプローチがすべての場合に機能するとは言いません.

于 2012-12-05T08:23:55.163 に答える