Tec*_*ard 61 python regex perl
我正在尝试处理一堆文件,然后我需要改变以删除文件名中的无关信息; 值得注意的是,我正在尝试删除括号内的文本.例如:
filename = "Example_file_(extra_descriptor).ext"
Run Code Online (Sandbox Code Playgroud)
我希望正则表达一大堆文件,其中括号表达式可能在中间或末尾,并且可变长度.
正则表达式是什么样的?Perl或Python语法将是首选.
Can*_*der 106
s/\([^)]*\)//
Run Code Online (Sandbox Code Playgroud)
所以在Python中,你会这样做:
re.sub(r'\([^)]*\)', '', filename)
Run Code Online (Sandbox Code Playgroud)
Wik*_*żew 38
在paretheses匹配子串的图案不具有其他(和)字符之间(如(xyz 123)在Text (abc(xyz 123))是
\([^()]*\)
Run Code Online (Sandbox Code Playgroud)
细节:
\(- 开口圆括号(请注意,在POSIX BRE中,(应使用,请参见sed下面的示例)[^()]*- 除了否定字符类/POSIX括号表达式中定义的字符之外的零或更多(由于* Kleene星形量词)字符,即除了和之外的任何字符()\) - 关闭圆括号(不允许在POSIX BRE中转义)删除代码段:
string.replace(/\([^()]*\)/g, '')preg_replace('~\([^()]*\)~', '', $string)$s =~ s/\([^()]*\)//gre.sub(r'\([^()]*\)', '', s)Regex.Replace(str, @"\([^()]*\)", string.Empty)Regex.Replace(str, "\([^()]*\)", "")s.replaceAll("\\([^()]*\\)", "")s.gsub(/\([^()]*\)/, '')gsub("\\([^()]*\\)", "", x)string.gsub(s, "%([^()]*%)", "")sed 's/([^()]*)//g'regsub -all {\([^()]*\)} $s "" resultstd::regex:std::regex_replace(s, std::regex(R"(\([^()]*\))"), "")NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\([^()]*\\)" options:NSRegularExpressionCaseInsensitive error:&error];
NSString *modifiedString = [regex stringByReplacingMatchesInString:string options:0 range:NSMakeRange(0, [string length]) withTemplate:@""];如果你不绝对需要使用正则表达式,使用考虑使用Perl的文本::平衡删除括号.
use Text::Balanced qw(extract_bracketed);
my ($extracted, $remainder, $prefix) = extract_bracketed( $filename, '()', '[^(]*' );
{ no warnings 'uninitialized';
$filename = (defined $prefix or defined $remainder)
? $prefix . $remainder
: $extracted;
}
Run Code Online (Sandbox Code Playgroud)
你可能会想,"为什么当一个正则表达式在一行中完成所有这一切?"
$filename =~ s/\([^}]*\)//;
Run Code Online (Sandbox Code Playgroud)
Text :: Balanced处理嵌套括号.因此$filename = 'foo_(bar(baz)buz)).foo'将被正确提取.这里提供的基于正则表达式的解决方案将在此字符串上失败.一个人将停在第一个关闭的paren,而另一个将全部吃掉它们.
$ filename = ~s /([^}]*)//; #wurn'foo_buz)).foo'
$ filename = ~s /(.*)//; #wurn'foo_.foo'
#text balanced example返回'foo _).foo'
如果任何一个正则表达式行为都可以接受,请使用正则表达式 - 但要记录限制和假设.