【发布时间】:2013-09-29 14:55:08
【问题描述】:
我想改变一个字符串,如下所示。但我找不到确切的正则表达式模式。
字符串如:
堆栈溢出 (1234)
堆栈交换 (12)
我想要的是继续
堆栈溢出
堆栈交换
我正在使用 Notepad++、UltraEdit 等。另外尝试 sed 命令也非常有用。
谢谢大家
【问题讨论】:
-
我试过 [(*)] 模式。但它只是找到(或)字符,而不是两个字符之间的所有字符“()”
我想改变一个字符串,如下所示。但我找不到确切的正则表达式模式。
字符串如:
堆栈溢出 (1234)
堆栈交换 (12)
我想要的是继续
堆栈溢出
堆栈交换
我正在使用 Notepad++、UltraEdit 等。另外尝试 sed 命令也非常有用。
谢谢大家
【问题讨论】:
尝试使用此查找:
\s+\([^)]+\)
然后什么都替换。
\s+ 匹配空格。
\( 匹配左括号。
[^)]+ 匹配除右括号之外的任何字符。
) 匹配右括号。
[(*)] 将匹配 (、* 或 ) 中的任何一个,因为它们在字符类中。
您也可以使用\s+\(.*?\),但它不如上面的正则表达式安全。在正则表达式中,点是通配符,括号用于捕获;这就是为什么我不得不用反斜杠来逃避它们。你不需要在字符类中转义它们,例如,你可以使用这个:\s+[(].*?[)] 虽然它有点长!
【讨论】:
Test (testje) more text (12345) 替换为Test more text。我不知道这是否是通缉行为。
(testje),它会被提及。
不知道 Notepad++ 但使用 sed 是一个简单的命令:
sed -i.bak 's/ *(.*$//' file
-i 用于内联编辑(它会将转换后的文件保存为file.bak)
【讨论】:
替换(Ctrl+H):
^(.+?)\s*\(\d+\)$
作者:
$1
这就是它的工作原理:
保留第 1 组中的所有内容,删除其余部分。
【讨论】:
使用awk 你可以这样做:
awk '{sub(/ \(.+\)/,x)}1' file
【讨论】: