Python 如何仅删除标点符号,如“quot;”&引用;及&引用;?

Python 如何仅删除标点符号,如“quot;”&引用;及&引用;?,python,regex,string,Python,Regex,String,我想搜索像“收入”或“收入”这样的特定词语。因此,我创建了一个单词列表并在文本中搜索单词 但是,对于带有额外标点符号(如“收入”或“收入”)的单词,我的代码不会返回任何结果。现在,我想删除这些标点,而不删除像“2.4”这样的数字中的点或任何其他像“%”这样的标记 我已经试过了 table = str.maketrans({key: None for key in string.punctuation}) text_wo_dots = text.translate(table) 及 但这删除了所

我想搜索像“收入”或“收入”这样的特定词语。因此,我创建了一个单词列表并在文本中搜索单词

但是,对于带有额外标点符号(如“收入”或“收入”)的单词,我的代码不会返回任何结果。现在,我想删除这些标点,而不删除像“2.4”这样的数字中的点或任何其他像“%”这样的标记

我已经试过了

table = str.maketrans({key: None for key in string.punctuation})
text_wo_dots = text.translate(table)


但这删除了所有标点符号。

我建议,您首先将文本拆分为单独的单词,包括点字符号

text = ["This is an example, it contains 1.0 number and some words."]
raw_list = text.split()
现在可以删除元素末尾的标点符号

cleaned_words = []
for word in raw_list:
    if word[-1] in ['.', ',', '!', '?']:
        cleaned_words.append(word[:-1])
    else:
        cleaned_words.append(word)
注1:如果您的文本包含类似
1.
1.0
的数字,您还需要考虑最后一个字符,并将该点保留在If
isdigit()
计算结果为
True

注2:如果有以多个标点符号结尾的句子,你应该运行while循环来删除它们,然后只在没有找到更多的标点符号时追加

while True:
    if word[-1] in ['.', ',', '!', '?']:
        word = word[:-1]
    else:
        break

cleaned_words.append(word)

像这样简单的方法也可能奏效:

[\,:!?][\n\s]

[\,:!?]
包含一些标点符号,如果需要,可以添加更多标点符号,而
[\n\s]
意味着它后面必须跟一个空格或换行符

以下是一个工作示例:

下面是Python代码:

import re

s = 'Bla, bla, bla 7.6 bla.'

pattern = '[\.,:!?][\n\s]'
s = re.sub(pattern, '', s+' ')
print(s)

您可以使用负向前看
(?!
和负向后看
(?)来断言直接位于左侧的内容不是数字:

(?<!\d)[^\w\s]+(?!\d)
(?
|

例如:

import re
text = "income,and 4.6 test"
text_wo_dots = re.sub(r'(?<!\d)[^\w\s]+(?!\d)',' ',text)
print(text_wo_dots) # income and 4.6 test
重新导入
text=“收入和4.6测试”

text_wo_dots=re.sub(r'(?能否添加一些无法找到所需单词的示例文本?此外,能否添加用于搜索特定单词的代码?您使用的对象是什么?您的特定搜索词是什么?是否仅是
收入
收入
?@Ralf:我搜索了count_earning的单词s=0表示文本中的i:如果i表示收益:count_earnings+=1,则我的单词列表为earnings=[“ebit”、“ebitda”、“eps”、“earning”、“earnings”、“income”、“profit”、“ebt”、“result”、“results”]。以下文本是我的代码未给出结果的示例:“目标是进一步提高细分市场的收入,增加销售量”文本是一个txt文件。谢谢!太好了!!这也很好,但必须有额外的空间,否则输出将是“blabla 7.6 bla”
import re
text = "income,and 4.6 test"
text_wo_dots = re.sub(r'(?<!\d)[^\w\s]+(?!\d)',' ',text)
print(text_wo_dots) # income and 4.6 test