为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用正则表达式删除括号内的文本?

/ 猿问

如何使用正则表达式删除括号内的文本?

慕桂英546537 2019-11-27 11:09:25

我正在尝试处理一堆文件,然后需要进行修改以删除文件名中的无关信息;值得注意的是,我正在尝试删除括号内的文本。例如:


filename = "Example_file_(extra_descriptor).ext"

我想对一整堆文件进行正则表达式,其中括号表达式可能在中间或结尾,并且长度可变。


正则表达式是什么样的?首选Perl或Python语法。


查看完整描述

3 回答

?
大话西游666


s/\([^)]*\)//

因此,在Python中,您可以执行以下操作:


re.sub(r'\([^)]*\)', '', filename)


查看完整回答
反对 回复 2019-11-27
?
catspeake

在括号匹配子串的图案不具有其他(和)字符之间(如(xyz 123)在Text (abc(xyz 123))是


\([^()]*\)

详细资料:


\(-圆括号(请注意,在POSIX BRE中(应使用,请参见sed下面的示例)

[^()]*-除否定的字符类别 / POSIX括号表达式中定义的字符以外的零个或多个(由于* Kleene星型限定符)字符,即和()

\) -封闭的圆括号(不允许在POSIX BRE中转义)

删除代码段:


JavaScript:string.replace(/\([^()]*\)/g, '')

PHP的:preg_replace('~\([^()]*\)~', '', $string)

Perl:$s =~ s/\([^()]*\)//g

Python:re.sub(r'\([^()]*\)', '', s)

C#:Regex.Replace(str, @"\([^()]*\)", string.Empty)

VB.NET:Regex.Replace(str, "\([^()]*\)", "")

Java的:s.replaceAll("\\([^()]*\\)", "")

红宝石:s.gsub(/\([^()]*\)/, '')

R:gsub("\\([^()]*\\)", "", x)

卢阿:string.gsub(s, "%([^()]*%)", "")

重击/ sed:sed 's/([^()]*)//g'

Tcl:regsub -all {\([^()]*\)} $s "" result

C ++std::regex:std::regex_replace(s, std::regex(R"(\([^()]*\))"), "")

目标-C:

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\([^()]*\\)" options:NSRegularExpressionCaseInsensitive error:&error];

NSString *modifiedString = [regex stringByReplacingMatchesInString:string options:0 range:NSMakeRange(0, [string length]) withTemplate:@""];

斯威夫特:s.replacingOccurrences(of: "\\([^()]*\\)", with: "", options: [.regularExpression])


查看完整回答
反对 回复 2019-11-27
?
qq_遁去的一_1

如果你不绝对需要使用正则表达式,使用考虑使用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;

}

您可能会想,“当正则表达式在同一行中完成花样操作时,为什么要进行所有这些操作?”


$filename =~ s/\([^}]*\)//;

Text :: Balanced处理嵌套的括号。因此$filename = 'foo_(bar(baz)buz)).foo'将被正确提取。此处提供的基于正则表达式的解决方案在此字符串上将失败。一个会停在第一个封闭的paren,另一个会全部吃光。


$ filename =〜s /([[^}] *)// ;; #返回'foo_buz))。foo'


$ filename =〜s /(.*)//; #返回'foo_.foo'


#文本平衡的示例返回'foo _)。foo'


如果任何一种正则表达式行为都可以接受,请使用正则表达式,但要记录限制和所做的假设。


查看完整回答
反对 回复 2019-11-27

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信