【问题标题】:How can I find and replace between ( ) characters using regex?如何使用正则表达式在 ( ) 字符之间查找和替换?
【发布时间】:2013-09-29 14:55:08
【问题描述】:

我想改变一个字符串,如下所示。但我找不到确切的正则表达式模式。

字符串如:

堆栈溢出 (1234)

堆栈交换 (12)

我想要的是继续

堆栈溢出

堆栈交换

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

谢谢大家

【问题讨论】:

  • 我试过 [(*)] 模式。但它只是找到(或)字符,而不是两个字符之间的所有字符“()”

标签: regex sed notepad++


【解决方案1】:

尝试使用此查找:

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

然后什么都替换。

\s+ 匹配空格。

\( 匹配左括号。

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

) 匹配右括号。


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

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

【讨论】:

  • 这太有用了..这就是我想要的。感谢您分享知识并解决我的问题
  • 这会将Test (testje) more text (12345) 替换为Test more text。我不知道这是否是通缉行为。
  • @Broxzier 我敢肯定,如果 OP 想在您的示例中保留 (testje),它会被提及。
  • 纯粹解释你们太棒了。我羡慕你们所有人
  • @user2182319 只要您尝试解决您的问题,您就可以得到答案;)
【解决方案2】:

不知道 Notepad++ 但使用 sed 是一个简单的命令:

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

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

【讨论】:

  • 非常感谢。我也会在 sed 中尝试。很高兴知道 REGEX 上有大师
【解决方案3】:

替换(Ctrl+H):

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

作者:

$1

这就是它的工作原理:

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

【讨论】:

  • 谢谢,但是这个选择了整行,并且用 $1 dşd 替换不起作用
  • @user2182319 它选择整行,并将其替换为第 1 组中的部分。我自己在 Notepad++ 上测试过。
  • 嗯,在尝试您的代码时,我只使用了程序员的记事本而不是记事本++。因为文件超过1G。
  • 但是很棒的解释。你知道吗,我开始对 REGEX 感兴趣。你的解释非常简单和纯粹。你在写关于正则表达式的教程吗?
  • @user2182319,不,我不是,我只是喜欢玩它,然后一点一点地学习。感兴趣有很大帮助,而且有很多教程!
【解决方案4】:

使用awk 你可以这样做:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-18
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    • 1970-01-01
    • 2017-01-02
    • 1970-01-01
    • 2015-04-27
    相关资源
    最近更新 更多