gpt4 book ai didi

python - 如何检查子字符串是否为ascii+latin字符并用空格填充ascii/latin字符子字符串?

转载 作者:行者123 更新时间:2023-11-28 21:43:43 27 4
gpt4 key购买 nike

给定这样一个字符串:

顺便采买些喜欢的CD和DVD或vcd。

期望的输出是:

顺便采买些喜欢的 CD 和 DVD 或 vcd 。

我试过查看每个字符并检查前后字符是否为 ascii,并使用以下条件决定是否应该填充空格:

  • 检查当前字符的“ascii-ness”
  • 如果前一个字符的“ascii-ness”与当前字符不同,左键补一个空格

但我一直这样做,但看起来效率很低:

def addSpace(text):
currIsAscii = None; prevIsAscii = None; newsentence = ""
for i in text:
try:
i.decode('ascii')
currIsAscii = True
except:
currIsAscii = False
if prevIsAscii != currIsAscii:
newsentence+=" "
newsentence+=i
else:
newsentence+=i
prevIsAscii = currIsAscii
while " " in newsentence:
newsentence = newsentence.replace(" ", " ")
return newsentence.strip()

此代码在 Python2 中有效,但是 i.decode('ascii') 部分不是 Python2 和 Python3 兼容的解决方案,我见过 How to check if a string in Python is in ASCII?但是没有同时适用于 Python 2 和 3 的解决方案。

有没有一种方法可以检查字符的 ascii 性,使其在 Python 2 和 3 上都能正常工作?

除了遍历每个字符?是否有另一种方法来填充 ascii 子字符串开头和结尾的空格?


上面代码的另一个怪癖是它不处理 [a-zA-Z0-9] 之外的代码点,例如当单词“Café。” -> “Café。”时,所需的输出将是“Café。”

试试这句话:

s= u"顺便采买些喜欢的CD和DVD或Café。"

(出于某种原因我无法提供所需的输出,因为 SO 认为它是垃圾邮件,所以我只是口头描述。应该填充整个子字符串“Café”,而不是分成 2 个子字符串。

子串的检测需要包含带重音的拉丁字符。

最佳答案

在 Python3 中

import re
s= "顺便采买些喜欢的CD和DVD或Café。"
re.sub("([A-Za-z0-9À-Öà-ÿ]+)"," \\1 ",s)

[输出]:

顺便采买些喜欢的 CD 和 DVD 或 Café 。

正则表达式:https://pypi.python.org/pypi/regex

pip 安装正则表达式

import regex
regex.sub("(\p{Latin}+)"," \\1 ",s)

关于python - 如何检查子字符串是否为ascii+latin字符并用空格填充ascii/latin字符子字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41847273/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com