Nie ma [p {ll} p {lo} 1 w Pythonie i zmagam się, aby napisać wyrażenie regularne, które rozpoznaje Unicode ... i nie mylisz interpunkcji, takich jak" - "lub dodaj śmieszne diakrytów Gdy skrypt napotyka znak fonetyczny (jak "ô 'lub' طس ').

Moim celem jest oznaczenie wszystkich liter (ASCII i dowolnego Unicode) i zwróć "A". Liczba [1-9] jako 9.

Moja obecna funkcja to:

def multiple_replace(myString):
    myString = re.sub(r'(?u)[^\W\d_]|-','A', myString)
    myString = re.sub(r'[0-9]', '9', myString)
    return myString

Zwroty, które dostaję, są (zauważają niespójność w sposobie "-" jest oznakowany ... czasami jako "a" czasami jako "a"):

TX 35-L | AA 99AA
М-21 | AAœA99
A 1 طس | A 9 A~˜A·A~AA
US-50 | AAA99
yeni sinop-erfelek yolu çevre yolu | AAAA AAAAAAAAAAAAA AAAA AƒA§AAAA AAAA
Av Antônio Ribeiro | AA AAAAƒA´AAA AAAAAAA

To, czego potrzebuję, to:

TX 35-L | AA 99-A
М-21 | A-99
A 1 طس | A 9 AAAAA
US-50 | AA-99
yeni sinop-erfelek yolu çevre yolu | AAAA AAAAAAAAAAAAA AAAA AAAAAAAA AAAA
Av Antônio Ribeiro | AA AAAAAAAAAA AAAAAAA

... Czy jest to nawet możliwe (z Python Re 2.7), aby powszechnie zidentyfikować wszystkie znaki UTF-8, które nie są powszechnymi znakami interpunkcyjnymi (tj. "()", ",". "," - ", itp.) I nie 1-9 numery bez [p {ll} p {lo}?

0
user14696 22 listopad 2013, 04:48

2 odpowiedzi

Najlepsza odpowiedź

Nie jestem pewien, dlaczego moja odpowiedź właśnie została usunięta, ale tutaj wyszedłem z:

Funkcja (REGEX):

def multiple_replace(myString):
    myString = re.sub(ur'(?u)[^\W\d_]', u'A', myString)
    myString = re.sub(ur'[0-9]', u'9', myString)
    return myString

Zadzwoń (w / dekodowanie):

with codecs.open(r'test5.txt', 'w', 'utf-8') as outfile1:
    for row in reader:
        unicode_row = [x.decode('utf-8') for x in row]
        item = unicode_row[csv_col_index]
        outfile1.write(row[1] + "," + item + "," + multiple_replace(item) + "\n")
-2
user14696 25 listopad 2013, 03:24

Jeśli używasz Python 2.7, użyj ciągów Unicode. Zakładam, że przykłady "to, co potrzebuję" są nieprawidłowe, czy naprawdę chcesz AAAAA dla طس? Jeśli przeczytaj struny z pliku, najpierw zdekodować struny do Unicode.

#!python2
#coding: utf8
import re

# Note leading u
data = u'TX 35-L|М-21|A 1 طس|US-50|yeni sinop-erfelek yolu çevre yolu|Av Antônio Ribeiro'.split('|')

for d in data:
    r = re.sub(ur'(?u)[^\W\d_]',u'A', d)
    r = re.sub(ur'[0-9]', u'9', r)
    print d
    print r
    print

Wynik:

TX 35-L
AA 99-A

М-21
A-99

A 1 طس
A 9 AA

US-50
AA-99

yeni sinop-erfelek yolu çevre yolu
AAAA AAAAA-AAAAAAA AAAA AAAAA AAAA

Av Antônio Ribeiro
AA AAAAAAA AAAAAAA
2
Mark Tolonen 22 listopad 2013, 07:30