Python中如何删除字符串中的特殊字符?

<span> </span>

上边这个代码中间我以为是空格,用 replace 替换不掉,一检查编码才发现不是空格,是\u003F ,这样的应该怎么删?
Python中如何删除字符串中的特殊字符?

12 回复

你的目的是什么,删除 span 中间的内容?


import re

def remove_special_chars(text, keep_pattern=r'[a-zA-Z0-9\s]'):
    """
    删除字符串中的特殊字符
    
    Args:
        text: 原始字符串
        keep_pattern: 要保留的字符正则表达式模式,默认保留字母、数字和空格
    
    Returns:
        清理后的字符串
    """
    # 使用正则表达式替换非保留字符
    return re.sub(f'[^{keep_pattern}]', '', text)

# 示例使用
original_text = "Hello, World! 123 #$%"
cleaned_text = remove_special_chars(original_text)
print(f"原始: '{original_text}'")
print(f"清理后: '{cleaned_text}'")

# 更多示例
test_cases = [
    "Email: test@example.com",
    "Phone: (123) 456-7890",
    "Price: $19.99",
    "Text with\nnewline\tand tab"
]

for text in test_cases:
    cleaned = remove_special_chars(text)
    print(f"'{text}' -> '{cleaned}'")

# 自定义保留字符的示例
custom_text = "保留标点: hello, world! 123."
# 保留字母、数字、空格和常见标点
custom_cleaned = remove_special_chars(custom_text, r'[a-zA-Z0-9\s.,!?]')
print(f"自定义保留: '{custom_text}' -> '{custom_cleaned}'")

这个方法的核心是正则表达式[^pattern],它会匹配所有不在指定字符集里的字符。默认保留字母、数字和空格,你可以通过修改keep_pattern参数来调整要保留的字符。

如果不想用正则,还有个简单方法:

def simple_remove(text):
    return ''.join(char for char in text if char.isalnum() or char.isspace())

print(simple_remove("Test!@# String 123"))  # 输出: Test String 123

用正则更灵活,能精确控制要保留什么字符。

用这则啊\s

replace(’\u003F’, ‘’) 一样删啊

删不掉啊,我试过了

对,就是想删掉中间内容



黑人问号

可能是这个字符不是 003f…



正则

import re

s=’<span>asasdasd</span>‘
patt=re.compile(’(?<=&lt;span&gt;).*(?=&lt;/span&gt;)’)
ans=patt.search(s)
if ans:
print ans.group(0

换个角度, 不用黑名单改成白名单

当然不能 replace ,因为’\u003F’ == '?'
你这里这个,在 html 里显示为&nbsp;的玩意,叫 no-break space , unicode 为\u00A0

嗯嗯,用 replace (’\u00A0’,’’)通过了,我之前是用“文本转换工具”查看的编码。

回到顶部