我需要编写一个可以执行以下操作的正则表达式,它应该在匹配的字符串之后返回第一组引号之间的文本,给定引号匹配的字符串不是由不同的字符串继续。所以:
def my_method "param/1" "param2"
应该不返回任何内容和
my_method "param/3" "param4"
应仅返回“param / 3”
到目前为止,我有(?<!def )my_method (["'])(?:(?=(\\?))\2.)*?\1
但这也与my_method部分不匹配。
答案 0 :(得分:0)
这是grep的正则表达式,带有perl的帮助,可以检索引号之间的第一个东西:
grep -Po '(?<!def my_method )(?<=my_method )"[^"]*"'
这段代码做了一些断言:
def
开头的匹配。我添加了这个是因为我对这个问题的理解有限。my_method
和第一组引号之间必须有一个空格。这是由于正则表达式背后的限制。说明:
grep -P
适用于perl falvour grep -o
仅用于保留匹配的部分(?<!def my_method )
- 这是我们不想要的开始(?<=my_method )
- 这是我们想要的开始。这是一个后视,所以它不会成为比赛的一部分)"[^"]*"
- 这就是我们想要的东西:引号之间的东西。或者,您也可以尝试sed
:
grep -P '(?<!def)\s*my_method[^"]+"[^"]+"' | sed 's/^[^"]\+\("[^"]*"\).*$/\1/g'