繁体   English   中英

正则表达式:匹配除逗号以外的任何字符(包括空格)

[英]Regex: Match any character (including whitespace) except a comma

我想将除逗号以外的任何字符和任何空白与正则表达式匹配。 仅匹配除逗号以外的任何字符都会给我:

[^,]*

但我也想在字符串中的任何位置匹配任何空格字符,制表符,空格,换行符等。

编辑:

通过:%s / foo / bar / gc在vim中使用sed。

在以下示例中,我想查找从func到逗号的所有内容:

func("bla bla bla"
  "asdfasdfasdfasdfasdfasdf"
"asdfasdfasdf", "more strings")

一世

要使用RegExSED使用multiline ,应在此处查看

编辑:

SED命令中,使用NewLine有点不同。 SED命令支持三种模式来管理多行操作NPD 要了解其工作原理,请参见此说明 (使用多行)。 这里讨论这三个操作。

我的猜测是N运算符是这里缺少的考虑领域。 N运算符将允许在字符串中感测\\n

来自这里的一个例子:

有时,人们希望在sed脚本中使用换行符。 好吧,这里有一些微妙的问题。 如果要搜索新行,则必须使用“ \\ n”。 这是一个示例,其中搜索一个短语,然后删除该短语之后的换行符-将两行连接在一起。

(echo a; echo x; echo y)| sed'/ x $ / {N s:x \\ n:x:}'

产生

XY

但是,如果要插入新行,请不要使用“ \\ n”-而是插入文字换行符:

(echo a; echo x; echo y)| sed's:x:X \\:'

产生

X

ÿ

因此,基本上,您正在尝试在多行上匹配一个模式。

这是在sed执行此操作的一种方法(虽然很确定它们在vim中不可用,但我不知道如何在vim复制它)

sed '
    /func/{
            :loop
            /,/! {N; b loop}
            s/[^,]*/func("ok"/
    }
' inputfile

比方说, inputfile包含这些行

func("bla bla bla"
  "asdfasdfasdfasdfasdfasdf"
"asdfasdfasdf", "more strings")

输出是

func("ok", "more strings")


详细资料

  • 如果一行包含func ,请输入大括号。
  • :loop是一个名为loop的标签
  • 如果该行不包含, (这就是/,/!意思)
    • 将下一行追加到模式空间( N
    • 分公司/去loop标签( b loop
  • 因此,它将继续追加行并循环,直到找到为止,然后运行s命令,该命令将第一个逗号之前的所有字符与(多行)模式空间进行匹配,并执行替换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM