【问题标题】:Regex: Match any character (including whitespace) except a comma正则表达式:匹配除逗号以外的任何字符(包括空格)
【发布时间】:2012-11-05 23:05:40
【问题描述】:

我想用正则表达式匹配除逗号之外的任何字符和任何空格。只匹配除逗号以外的任何字符给我:

[^,]*

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

编辑:

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

我想查找从func开始直到逗号,在下面的例子中:

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

【问题讨论】:

  • [^,]* 匹配到逗号? rubular.com/r/sAq4ufTDe2
  • 您的模式似乎没问题。以防万一尝试转义逗号,这可能是您使用的正则表达式引擎所必需的:[^\,]*
  • [^,]* 匹配到我的逗号或行尾。我很难让它继续搜索,直到找到逗号,即使它必须通过换行符
  • 我正在尝试通过 :%s/foo/bar/gc 在 vi​​m 中执行 sed。这可能是个问题吗?
  • 你检查过我的建议了吗?

标签: regex string sed string-parsing


【解决方案1】:

要使用SED 中的multiline 使用RegEx,您应该查看here

编辑:

SED 命令中,使用 NewLine 有点不同。 SED 命令支持三种模式来管理多行操作NPD。要了解它是如何工作的,请参阅this(使用多行)说明。这里讨论了这三个操作。

我的猜测是 N 运算符是此处缺少的考虑区域。添加N 运算符将允许在字符串中感知\n

来自here的例子:

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

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

生成

xy

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

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

生成

一个X

是的

【讨论】:

  • 这似乎对我不起作用,但可能是因为我没有包含有关我的问题的足够信息。我已经编辑了原始问题。我基本上想找到字符串 func( 一直到逗号。我有 :%s/func([^,]*,/bar/gc 但这似乎在新行中找不到
  • 或者我不确定该放在哪里 (?m)。我把它直接放在 [^,]* 之前。如:%s/func((?m)[^,]*,/bar/gc。这样对吗?
  • 在 SED 中它不会以这种方式工作。看看这个:unix.stackexchange.com/questions/26284/…
  • 你能把这个作为答案让我接受吗?另外,感谢您的帮助
  • 您能否在答案中包含相关信息?谢谢。
【解决方案2】:

所以基本上你是在尝试匹配多行的模式。

这是在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 命令,它将第一个逗号之前的所有字符与(多行)模式空间匹配,并执行替换.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    相关资源
    最近更新 更多