如何从Unicode fi中删除字母数字单词

2024-03-28 18:49:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要使用字典数据库,但大部分是一些字母数字无用的东西,有趣的领域要么是非字母数字(如中文字符)或在一些括号内。我搜索了很多,了解了很多工具,比如sed,awk,grep,etc,我甚至想过创建一个Python脚本来解决这个问题,但是我从来没有找到一个解决方案。你知道吗

数据库的一行如下所示:

助 L1782 DN1921 K407 O431 DO346 MN2313 MP2.0376 E314 IN623 DA633 DS248 DF367 DH330 DT284 DC248 DJ826 DG211 DM1800 P1-5-2 I2g5.1 Q7412.7 DR3945 Yzhu4 Wjo ジョ たす.ける たす.かる す.ける すけ {help} {rescue} {assist} 

我需要这样:

助 ジョ たす.ける たす.かる す.ける すけ {help} {rescue} {assist} 

我怎么能用上面提到的任何一种工具来做这个?你知道吗


Tags: 工具数据库字典字母etchelp数字字符
3条回答

就我个人而言,在你的示例行中,我列出了所有以空格开头和结尾的字母数字字符:

sed -i 's/ [a-zA-Z0-9 .-]+ / /g'应该接近你所需要的。如果要擦除的文本包含其他内容,则可能需要添加更多特殊字符。这是对单个空间的就地替换(本质上是删除)。你知道吗

没有linux的盒子来验证这个。。。可能需要按摩一下。你知道吗

同样值得一提的是,如果括号可以包含两个空格:{test results found},这将起作用,因为它会吹走results

如果您仍然想要一个Python解决方案,那么这里有一个Python解决方案:

import re
alpha_brack = re.compile(r"([a-zA-Z0-9.\-]+)|({.*?})")

my_string = """
助 L1782 DN1921 K407 O431 DO346 MN2313 MP2.0376 E314 IN623 DA633 DS248 DF367 
DH330 DT284 DC248 DJ826 DG211 DM1800 P1-5-2 I2g5.1 Q7412.7 DR3945 Yzhu4 
Wjo ジョ たす.ける たす.かる す.ける すけ {help} {rescue} {assist}"""

match = alpha_brack.findall(my_string)

new_string = my_string

for g0, _ in match: # only care about first group!
    new_string = new_string.replace(g0,'',1) # replace only first occurence!

final = re.sub(r'\s{2,}',' ', new_string) # finally, clean up whitespace

print(final)

我的结果:

'21161ジョたすけるたすかるすけ{帮助}{救援}{协助}

使用perl

perl -ne '
    m/(.*?)({.*)/; # Split based on '{'
    my $a=$1; my $b=$2;
    $a =~ s/[[:alnum:]-.]//g; #Remove alphabets, numbers, '.', '-' (add more characters as you need.)
    $a =~ s/ +/ /g; # Compress spaces.
    print "$a $b\n"; #Print 2 parts and a newline
' dbfile.txt

内联注释中的解释。你知道吗

sed类似的逻辑:

sed '
     h; #Save line in hold space.
     s/{.*//; # Remove 2nd part
     s/[a-zA-Z0-9.-]//g; # Remove all alphabets, numbers, . & -
     s/  */ /g; # Compress spaces
     x; #Save updated 1st part in hold space, take back the complete line in pattern space
     s/[^{]*{/{/; #Remove first part
     x; #Swap hold & pattern space again.
     G; # Append 2nd part to first part separated by newline
     s/\n//; # Remove newline.
     ' dbfile.txt

相关问题 更多 >