gpt4 book ai didi

regex - 如何将特殊字符替换为下划线(_)perl

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:11:37 25 4
gpt4 key购买 nike

my @folder = ('s,c%','c__pp_p','Monday_øå_Tuesday,  Wednesday','Monday &       Tuesday','Monday_Tuesday___Wednesday');

if ($folder =~ s/[^\w_*\-]/_/g ) {
$folder =~ s/_+/_/g;
print "$folder : Got %\n" ;
}

使用上面的代码我无法处理这个“Monday_øå_Tuesday_Wednesday”

输出应该是:

s_c
c_pp_p
Monday_øå_Tuesday_Wednesday
Monday_Tuesday
Monday_Tuesday_Wednesday

最佳答案

您可以使用 \W 来否定 \w 字符类,但您遇到的问题是 \w 没有t 匹配您的非 ascii 字母。

所以你需要做这样的事情:

#!/usr/bin/env perl
use strict;
use warnings;
use Data::Dumper;

my @folder = ('s,c%','c__pp_p','Monday_øå_Tuesday, Wednesday','Monday & Tuesday','Monday_Tuesday___Wednesday');

s/[^\p{Alpha}]+/_/g for @folder;
print Dumper \@folder;

输出:

$VAR1 = [
's_c_',
'c_pp_p',
'Monday_øå_Tuesday_Wednesday',
'Monday_Tuesday',
'Monday_Tuesday_Wednesday'
];

这使用了 unicode 属性 - 这些记录在 perldoc perluniprop 中- 但总而言之,\p{Alpha}unicode 字母数字集,很像 \w 但国际化了。

尽管如此,它在第一行确实有一个尾随 _。从你的描述来看,这似乎是你想要的。如果没有,那么……可能更容易:

s/_$// for @folder;

比制作更复杂的图案。

关于regex - 如何将特殊字符替换为下划线(_)perl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35936676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com