从 Python 中的字符串列表中删除章节号
Posted
技术标签:
【中文标题】从 Python 中的字符串列表中删除章节号【英文标题】:Remove Chapter number from list of strings in Python 【发布时间】:2018-04-02 15:17:07 【问题描述】:我正在编写的程序将字符串列表作为输入,并试图删除章节编号。我已经编写了函数,但它当前不起作用。我已经提供了我的函数和输出样本!谢谢!
def remove_chapter(chapter_header):
for i in range(101):
chapters="Chapter " + str(i)
chapter_text=[my_string.replace(chapters,"") for my_string in chapter_header]
return chapter_text
这里是当前输出不工作的功能: Output
【问题讨论】:
您在for
循环中有一个无条件的return
语句。这通常是一个不好的迹象,因为它将在第一次迭代后退出循环,即在它完成 "Chapter 0"
的替换之后。
我已经进行了编辑,但仍然无法正确读取。
在 for 循环 chapter_text = chapter_header[:]
之前。然后在你的列表理解中迭代chapter_text
,而不是chapter_header
。并将return
移出循环。
或者只是将整个函数替换为[re.sub(r'Chapter \d+\s*', '', s) for s in chapter_header]
。不要忘记import re
。
【参考方案1】:
由于您的strings
有类似的模式需要删除,但有一些变化(chapter number
),最好使用python.re
。有了它,您的pattern matching
就有很大的灵活性。
所以,你需要做的就是:
>>> import re
>>> [ re.sub('Chapter \d+ ', '', string) for string in chapter_header ]
#driver 值:
IN : chapter_header = ['Chapter 1 It is ...','However little ...','Chapter 12 Lorem Ipsum']
OUT : ['It is ...', 'However little ...', 'Lorem Ipsum']
分解一下,你的模式看起来像:
'Chapter'<whitespace>[number/s]<whitespace>
因此,只要找到此模式,就会替换该字符串,或者如果未找到,则忽略。
【讨论】:
【参考方案2】:给定一个章节列表,我们可以删除章节和编号,直到每章的第一个单词。
给定
import itertools as it
chapters = [
"Chapter 1 It is a truth universally acknowledged ...",
"Chapter 2 Mr. Bennet was among the earliest ...",
"Chapter 3 Not all that Mrs. Bennet, however, with ...",
]
代码
pred = lambda x: (x == "Chapter") or x.isdigit()
results = [list(it.dropwhile(pred, [word for word in chapter.split()])) for chapter in chapters]
results
输出
[['It', 'is', 'a', 'truth', 'universally', 'acknowledged', '...'],
['Mr.', 'Bennet', 'was', 'among', 'the', 'earliest', '...'],
['Not', 'all', 'that', 'Mrs.', 'Bennet,', 'however,', 'with', '...']]
详情
列表推导将章节拆分为列表和列表中的单词。等效:
for chapter in chapters:
print([word for word in chapter.split()])
# ['Chapter', '1', 'It', 'is', 'a', 'truth', 'universally', 'acknowledged', '...']
# ['Chapter', '2', 'Mr.', 'Bennet', 'was', 'among', 'the', 'earliest', '...']
# ['Chapter', '3', 'Not', 'all', 'that', 'Mrs.', 'Bennet,', 'however,', 'with', '...']
最后,itertools.dropwhile
迭代每个列表并删除项目,直到谓词不再为真。换句话说,继续删除第一个既不是"Chapter"
也不是数字的项目。
如果需要,可以将生成的章节重新连接为字符串。
[" ".join(chapter) for chapter in results]
# ['It is a truth universally acknowledged ...',
# 'Mr. Bennet was among the earliest ...',
# 'Not all that Mrs. Bennet, however, with ...']
【讨论】:
以上是关于从 Python 中的字符串列表中删除章节号的主要内容,如果未能解决你的问题,请参考以下文章