测试空文字括号序列匹配的最短方法

时间:2016-10-17 23:00:07

标签: regex bash

在头衔之后,我请求一些涉及bash和正则表达式的帮助 我想匹配一系列文字空括号 他们应该按照以下方式打开和关闭每个人:

匹配:“”或“()”或“()()()()()()”
不匹配:“(”或“((()()))”或“))()))()()”

这是我尝试过的。 (abi2包含输入字符串)

  • 使用$s的替代解决方案,几乎无效(sed除外)

    $s="."
  • [ `echo $s|sed 's/\(()\)*/./'` = "." ]&&echo true||echo false 所需的表单,效果不佳

    [[ <arg1> =~ <arg2> ]]

缺少一些空间,因为我的目标是尽可能生成最短的代码(个人挑战) 有人可以帮帮我吗? :'(

3 个答案:

答案 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

输出:()()