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. Hello World。
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、idea、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 回答