繁体   English   中英

从字符串中提取特定范围内的unicode字符

[英]Extract unicode characters within a certain range from a string

我有一个带有很多垃圾字符的文本文件。

https://raw.githubusercontent.com/shantanuo/marathi_spell_check/master/dicts/sample.txt

我只需要保留天神角色。 预期的干净输出看起来像这样...

भूमी
भूमी
भूमीला
भैय्यासाहेब
भैरवनाथ
भैरवी
भैरव
गावापासून
गा

按照此页面,我需要提取U + 090到U + 097的Unicode范围之间的所有字符https://en.wikipedia.org/wiki/Devanagari_(Unicode_block)


我尝试了这段代码,但是返回了一些外来字符。

def remove_junk(word):
    mylist=list()
    for i in word:
        if b'9' in (i.encode('ascii', 'backslashreplace')):
            mylist.append(i)
    return (''.join(mylist))

with open('sample2a.txt', 'w') as nf:
    with open('sample.txt') as f:
        for i in f:
            nf.write(remove_junk(i) + '\n')

您可以使用正则表达式删除不在Unicode范围U + 0900-U + 097F内的所有字符。

import re

p = re.compile(r'[^\u0900-\u097F\n]')   # preserve the trailing newline
with open('sample.txt') as f, open('sample2a.txt', 'w') as nf:
    for line in f:
        cleaned = p.sub('', line)
        if cleaned.strip():
            nf.write(cleaned)

最少的代码样本

import re

text = '''
‘भूमी
‘भूमी’
‘भूमी’ला
‘भैय्यासाहेब
‘भैरवनाथ
‘भैरवी
‘भैरव’
ﻇﻬﻴﺮ
(ページを閲覧しているビジターの使用言語)。
(缺少文字)
गावापासून
गा
'''

p = re.compile(r'[^\u0900-\u097F\n]')
for line in text.splitlines():
    cleaned = p.sub('', line)
    if cleaned.strip():
        print(cleaned)

# भूमी
# भूमी
# भूमीला
# भैय्यासाहेब
# भैरवनाथ
# भैरवी
# भैरव
# गावापासून 
# गा

我不了解Python,但是我想可以像在JavaScript中一样在正则表达式中使用Unicode属性,因此可以使用Devanagari脚本属性以某种方式修改以下脚本:

var text =
`‘भूमी
‘भूमी’
‘भूमी’ला
‘भैय्यासाहेब
‘भैरवनाथ
‘भैरवी
‘भैरव’
ﻇﻬﻴﺮ
(ページを閲覧しているビジターの使用言語)。
(缺少文字)
गावापासून
�गा`;
console.log (text.replace (/[^\r\n\p{Script=Devanagari}]/gu, ""));

产生:

भूमी
भूमी
भूमीला
भैय्यासाहेब
भैरवनाथ
भैरवी
भैरव



गावापासून
गा

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM