嗨我需要一个正则表达式,它会给我这样的部分
./something\", [something.sh
来自此字符串
("./something\", [something.sh", ["./something\", [something.sh"], [/* 37 vars */])
可能吗?我真的遇到了麻烦,因为那里有“转义序列和那个','字符,所以我不能简单地使用匹配所有内容而不是这些字符。 我正在使用unix,因此也可以使用几个greps或类似的管道。 谢谢你的建议。
答案 0 :(得分:1)
使用Perl,您可以使用具有extract_quotelike
功能的Text::Balanced来执行您需要的操作。
您可以使用以下方式手动执行:
/"((?:\\.|.)*?)"/
基本上:从引号开始,如果你看到\
,抓住下一个字符(即使它是一个引用),否则继续直到看到引号。
答案 1 :(得分:1)
echo '("./something\", [something.sh", ["./something\", [something.sh"], [/* 37 vars */])' |
sed 's/.*\(\.\/something\\", \[something.sh"\).*/\1/'
答案 2 :(得分:1)
您的输入看起来像Python文字。您可以按原样评估:
$ echo '("./something\", [something.sh", ["./something\", [something.sh"], )' |\
> python -c'print input()[0]'
输出:
./something", [something.sh
或者对于多行情况:
$ echo '("./something\", [something.sh", ["./something\", [something.sh"], )' |\
> python -c'import ast, fileinput
> for line in fileinput.input():
> print ast.literal_eval(line)[0]'
输出:
./something", [something.sh
答案 3 :(得分:-1)
这并不直接回答您的问题,但我的建议是让您的正则表达式首先快速,然后使用您使用的任何语言编写代码。
这个网站是我经常首先使用我的正则表达式的网站:www.regexr.com
这真的很好,因为它也会向你展示分组。