我想改变一个字符串,如下所示。但我找不到确切的正则表达式模式。
字符串如:
堆栈溢出 (1234)
堆栈交换 (12)
我想要的是继续
堆栈溢出
堆栈交换
我正在使用 Notepad++、UltraEdit 等。此外,尝试 sed 命令也会非常有用。
谢谢大家
不知道 Notepad++ 但使用 sed 它是一个简单的命令:
sed -i.bak 's/ *(.*$//' file
-i
用于内联编辑(它将转换后的文件保存为原始另存为file.bak
)
尝试使用此查找:
\s+\([^)]+\)
并无所取代。
\s+
匹配空格。
\(
匹配左括号。
[^)]+
匹配除右括号之外的任何字符。
)
匹配右括号。
[(*)]
将匹配 中的任何一个(
,*
或者)
因为它们在字符类中。
您也可以使用其他方式\s+\(.*?\)
,但它不如上面的正则表达式安全。在正则表达式中,点是通配符,括号用于捕获;这就是为什么我不得不用反斜杠来逃避它们。你不需要在字符类中转义它们,例如,你可以使用这个:\s+[(].*?[)]
虽然它有点长!
使用awk
你可以这样做:
awk '{sub(/ \(.+\)/,x)}1' file
替换(Ctrl+ H):
^(.+?)\s*\(\d+\)$
经过:
$1
这是它的工作原理:
第 1 组中的所有内容都被保留,其余的都被丢弃。