在头衔之后,我请求一些涉及bash和正则表达式的帮助 我想匹配一系列文字空括号 他们应该按照以下方式打开和关闭每个人:
匹配:“”或“()”或“()()()()()()”
不匹配:“(”或“((()()))”或“))()))()()”
这是我尝试过的。 (abi2
包含输入字符串)
使用$s
的替代解决方案,几乎无效(sed
除外)
$s="."
[ `echo $s|sed 's/\(()\)*/./'` = "." ]&&echo true||echo false
所需的表单,效果不佳
[[ <arg1> =~ <arg2> ]]
缺少一些空间,因为我的目标是尽可能生成最短的代码(个人挑战) 有人可以帮帮我吗? :'(
答案 0 :(得分:2)
Job | Image | Order
A1234 | FileA | 1
A1234 | FileB | 2
A1235 | FileA | 1
A1236 | FileA | 1
A1236 | FileB | 2
A1236 | FileC | 3
...输出如下:
#!/bin/bash
re='^([(][)])*$'
is_valid() { [[ $1 =~ $re ]]; }
for test_case in '' '()' "()()()()()()" "(" "((()()))" "))()))()()"; do
if is_valid "$test_case"; then
echo "matches: $test_case"
else
echo "does not match: $test_case"
fi
done
答案 1 :(得分:0)
仅使用正则表达式是不可能的。您需要something more powerful。这是因为正则表达式无法计算括号的深度。
答案 2 :(得分:0)
您好像正在寻找零次或多次()
正则表达式: ^(\(\))*$
Python代码:
regex = "^(\(\))*$"
search = re.search(regex, "()")
print search.string
输出:()
search = re.search(regex, "()()")
print search.string
输出:()()