python - 根据多个分隔符分割字符串,同时保留它们

标签 python string split whitespace sentence

我正在输入 5 个句子,需要使用多个分隔符 (,/!/?) 进行分割

不幸的是,在编写代码时,我只考虑了字母,并放置了这些分隔符并使用了 .split()。那时工作正常。

这是代码:

final_text = ''
split_one = ''
input_text = input("Enter the data: ")
count_d = input_text.count("!") + input_text.count("?") + input_text.count(".")

if count_d == 5:
            final_text = input_text
            final_text = final_text.replace('!', '! ').replace('?', '? ').replace('.', '. ')
            split_one = final_text.split()
            i = 0
            while True:
                print(split_one[i])
                i += 1
                if i == 5:
                    break

对于输入:a.b?c!d.f!

The output was 
a.
b?
c!
d.
f!

但我实际上输入的是句子而不是字母。例如

hi.how are you? I am good! what about you?bye!

它给了我:

 hi.
 how
 are
 you?
 I

而不是

hi.
how are you?
I am good!
what about you?
bye!

如何避免由于空格而导致的分割并仅针对分隔符进行分割? (,/./!)

PS:我不会使用任何外部软件包。版本是3.6

最佳答案

您可以使用itertools.groupby按标点符号分割字符串,例如:

>>> import itertools as it
>>> s = 'hi.how are you? I am good! what about you?bye!'
>>> r = [''.join(v).strip() for k, v in it.groupby(s, lambda c: c in '.!?')]
>>> r
['hi', '.', 'how are you', '?', 'I am good', '!', 'what about you', '?', 'bye', '!']
>>> for sentence, punct in zip(*[iter(r)]*2):
...     print(sentence + punct)
hi.
how are you?
I am good!
what about you?
bye!

如果你不关心标点符号,那么你可以使用:

>>> [''.join(v).strip() for k, v in it.groupby(s, lambda c: c in '.!?') if not k]
['hi', 'how are you', 'I am good', 'what about you', 'bye']

关于python - 根据多个分隔符分割字符串,同时保留它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43011492/

相关文章:

javascript - 如何将 Javascript 客户端连接到 Python-SocketIO 服务器?

python - 复制不在 row-python 开头的两个字符串之间的所有行

r - 如何将 dplyr 操作与列名的字符串列表一起使用

python - 按时间点拆分多个对象的 csv 文件

javascript - 将纯文本解析为js数组——给第二个元素添加分隔符

javascript - 如何在javascript中将大数组拆分成小数组?

python - 如何使用 python lxml 获取 html 元素

python - 如何在要抓取的 url 列表中安全地执行多线程?

javascript - 我如何使用 jQuery 为特定单词的所有实例设置样式/部分/?

python - 如何从特定格式的 DataFrame 创建稀疏矩阵