Учитывая строку, как это :?Как проверить, является ли подстрока имеют ASCII + латинских символов и блокнотом в формате ASCII/латинские буквы подстрок с пробелами
способ добычи, чтобы купить любимый CD и DVD или VCD.
Нужный выход: добыча
способ купить любимый CD и DVD или VCD.
Я попытался просматривал каждый персонаж и проверки того, является ли ASCII символ до и после, и используя следующие условия решают следует ли пэд пространство:
- Проверьте «ascii- Несс «текущего символа
- Если предыдущий символ в» ASCII-Несс «не то же самое, что и нынешние, оставляемых-блокнота пространство
Но я делал это как таковой, и это выглядит inefficien т:
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?
другого, чем перекручивание через каждый символ? есть еще один способ площадки пространства в начале и в конце латинской подстроки?
Другой бзик с приведенным выше кодом является то, что он не обрабатывает кодовые за [a-zA-Z0-9]
, например, когда слово «кафе. "->" Caf é. «Желаемый результат будет» кафе. «
Попробуйте это предложение:.
s= u"顺便采买些喜欢的CD和DVD或Café。"
(По некоторым причинам я не могу поставить желаемый результат, так как SO думает, что это спам, поэтому я просто словесно описать всю подстроку» Кафе «должен быть проложенный, не разделено на 2 подстрок.
обнаружения подстроки должно включать в себя диакритические латинские буквы.
Вы не должны пытаться _encode_ к ascii? Является ли текст строкой unicode? – RemcoGerlich
Обычно это строка юникода, содержащая подстроки ascii. И зная, где это ascii, и начальная и конечная точки смещения необходимы для заполнения пробела. – alvas
Обратите внимание, что акцентированные латинские символы _aren't ASCII_. – RemcoGerlich