如何使用正则表达式在()字符之间查找和替换?

时间:2013-09-29 14:55:08

标签: regex sed notepad++

我想像下面一样更改字符串。但我无法找到确切的正则表达式模式。

字符串如下:

Stack Overflow(1234)

堆栈交换(12)

我想要的是继续

Stack Overflow

Stack Exchange

我正在使用Notepad ++,UltraEdit等。此外,尝试使用sed命令也非常有用。

谢谢大家

4 个答案:

答案 0 :(得分:1)

不了解Notepad ++,但使用sed这是一个简单的命令:

 sed -i.bak 's/ *(.*$//' file

-i用于内联编辑(它会保存转换后的文件,原件保存为file.bak

答案 1 :(得分:1)

尝试使用此查找:

\s+\([^)]+\)

并且一无所获。

\s+匹配空格。

\(匹配左括号。

[^)]+匹配除右括号外的任何字符。

)匹配右括号。


[(*)]将匹配(*)中的任何一个,因为它们属于字符类。

您也可以使用\s+\(.*?\),但它不如上面的正则表达式安全。在正则表达式中,点是通配符,括号用于捕获;这就是为什么我不得不用反斜杠逃脱它们。你不需要在一个字符类中转义它们,例如,你可以使用它:\s+[(].*?[)]虽然它有点长!

答案 2 :(得分:0)

替换( Ctrl + H ):

^(.+?)\s*\(\d+\)$

人:

$1

这是它的工作原理:

Regular expression visualization

第1组中的所有内容都被保留,其余部分被删除。

答案 3 :(得分:0)

使用awk即可:

awk '{sub(/ \(.+\)/,x)}1' file