簡體   English   中英

編寫可識別所有unicode字母的python正則表達式

[英]Writing python regex that recognizes all unicode letters

python中沒有[\\ p {Ll} \\ p {Lo} \\ 1 ,而且我正在努力編寫可識別unicode的正則表達式...並且不會混淆標點符號(例如'-'或添加有趣的變音符號)當腳本遇到語音標記(例如“ô”或“طس”)時。

我的目標是標記所有字母(ASCII和任何unicode)並返回“ A”。 數字[1-9]等於9。

我當前的功能是:

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

我得到的回報是(請注意在標記“-”的過程上有些不完善...有時被標記為“ A”,有時被標記為“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

我需要得到的是:

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

...甚至(使用python re 2.7)甚至有可能通常識別不是通用標點符號的所有UTF-8字符(即'()',',','。','-'等)和NOT 1-9個沒有[\\ p {Ll} \\ p {Lo} \\}的數字?

如果使用Python 2.7,請使用Unicode字符串。 我假設您的“我需要的”示例不正確,或者您真的想要AAAAA作為طس嗎? 如果從文件中讀取字符串,請首先將字符串解碼為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

輸出:

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

不知道為什么我的答案剛剛被刪除,但是這就是我的想法:

函數(正則表達式):

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

通話(帶解碼):

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")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM