当前位置: 首页 > 面试题库 >

使用Python查找和替换非ASCII字符的正则表达式

谢正初
2023-03-14
问题内容

我需要将非ASCII的某些字符更改为“ _”。例如,

Tannhuser-> Tannh_user
  • 如果我在Python中使用正则表达式,该怎么做?
  • 有没有不使用RE的更好方法呢?

问题答案:

针对Python 3更新:

>>> 'Tannh‰user'.encode().decode('ascii', 'replace').replace(u'\ufffd', '_')
'Tannh___user'

首先,我们使用创建字节字符串encode()-默认情况下,它使用UTF-8编解码器。如果您有字节字符串,那么当然可以跳过此编码步骤。然后,我们使用ascii编解码器将其转换为“普通”字符串。

这使用了UTF-8的属性,即所有非ASCII字符都被编码为值> = 0x80的字节序列。

原始答案–对于Python 2:

如何使用内置str.decode方法做到这一点:

>>> 'Tannh‰user'.decode('ascii', 'replace').replace(u'\ufffd', '_')
u'Tannh___user'

(您会得到unicode字符串,因此可以str根据需要将其转换为。)

您还可以转换unicodestr,因此一个非ASCII字符将被ASCII之一代替。但是问题在于,unicode.encode通过replace将非ASCII字符转换为'?',所以您不知道问号是否已经存在;请参阅Ignacio
Vazquez-Abrams的解决方案。

另一种方法是使用ord()和比较每个字符的值(如果它们适合ASCII范围(0-127))-这适用于unicode字符串以及strutf-8,拉丁语和其他一些编码:

>>> s = 'Tannh‰user' # or u'Tannh‰user' in Python 2
>>> 
>>> ''.join(c if ord(c) < 128 else '_' for c in s)
'Tannh_user'


 类似资料:
  • 在这个问题的背景下,我想做以下修改: 查找: funcA(参数0,参数1,参数2,参数3); 替换: funcA可以有除param0之外的任意数量的参数。怎么做呢?为简单起见,忽略基本情况,即当传递给funcA的参数仅为param0时。 funcA是: 职能是: 编辑: 参数(param1,param2..)只是包含字母的字符串。

  • 问题内容: 在正则表达式中匹配非ASCII字符的最简单方法是什么?我想在输入字符串中单独匹配所有单词,但是语言可能不是英语,因此我需要匹配ü,ö,ß和ñ。另外,这是在Javascript/ jQuery中,因此任何解决方案都需要适用于此。 问题答案: 应该这样做: 它匹配ASCII字符集(0-127,即0x0至0x7F)中不包含的任何字符。 您可以使用Unicode执行相同的操作: 对于unico

  • 问题内容: 我需要替换字符串的一部分。我浏览了Python文档并发现了re.sub。 我期望这能打印,而不是“酒吧”。 谁能告诉我我做错了什么? 问题答案: 除了捕获要 替换 的零件外,您还可以捕获要 保留 的零件,然后使用引用对其进行引用以将它们包括在替换字符串中。 尝试以下方法: 另外,假设这是HTML,则应考虑使用HTML解析器来执行此任务,例如Beautiful Soup 。

  • 我有一根绳子: 我想将所有字符(#,)替换为(#),因此例外的输出是: 注意:我不知道字符串中有多少(#)或(#)序列 我尝试的是: 我试着写: 但结果是: 我的在线尝试 我尝试将(*)用于序列,但没有成功: 那么我如何才能得到我的例外输出?

  • 我正在尝试编写一个字符串替换方法,它可以工作,但是在同一个字符串上使用多个替换方法看起来很糟糕。我很确定我可以在这里使用正则表达式。 我想只使用1替换()或替换所有()方法。简而言之,尝试构造一个正则表达式来替换这些字符,#*

  • 首先,这不是家庭作业/学校问题。这是我个人项目所需要的东西,我能够用简单的字符概括问题,如下所示: 创建一个正则表达式,可以在输入字符串aaabaabaa(或类似)的java字符串replace eAll函数中使用,并将每个a转换为A,除非它前面有b。所以预期输出是AAAbaAbaA。我已经试了至少两个小时了...我能想到的最好的是: 这在aaa上失败,返回值为aaa 我试着在它应该是a之前说“任