当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何使用正则表达式删除括号内的文本?》经验,为你挑选了4个好方法。

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

filename = "Example_file_(extra_descriptor).ext"

我希望正则表达一大堆文件,其中括号表达式可能在中间或末尾,并且可变长度.

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



1> Can Berk Güd..:
s/\([^)]*\)//

所以在Python中,你会这样做:

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


.*获得第一个左边的paren和最后一个paren之间的所有内容:'a(b)c(d)e'将变为'ae'.[^]]*仅在第一个左边的paren和第一个右边的paren之间移除:'ac(d)e'.您还将获得嵌套parens的不同行为.
有什么理由喜欢.*?超过[^]]*

2> Wiktor Strib..:

在paretheses匹配子串的图案不具有其他()字符之间(如(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("\\([^()]*\\)", "")

Ruby:s.gsub(/\([^()]*\)/, '')

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

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

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

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

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

Objective-C:
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\([^()]*\\)" options:NSRegularExpressionCaseInsensitive error:&error]; NSString *modifiedString = [regex stringByReplacingMatchesInString:string options:0 range:NSMakeRange(0, [string length]) withTemplate:@""];



3> Gumbo..:

我会用:

\([^)]*\)



4> daotoad..:

如果你不绝对需要使用正则表达式,使用考虑使用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 /([^}]*)//; #wurn'foo_buz)).foo'

$ filename = ~s /(.*)//; #wurn'foo_.foo'

#text balanced example返回'foo _).foo'

如果任何一个正则表达式行为都可以接受,请使用正则表达式 - 但要记录限制和假设.

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有