正则表达式检查' - '或'+'是否在开始和结束

时间:2012-06-20 12:42:08

标签: .net regex

我正在尝试创建一个正则表达式,可以检查字符串是否匹配模式-*0001-

字符串的第一个字符或最后一个字符可以是+-。字符串开头有一个可选的*+-之后),之后我们禁止使用特殊字符。除了+-和可选*之外,至少需要一个字符。

正确的匹配是

  1. -cccccc
  2. cccccc-
  3. +ccccc
  4. ccccc+
  5. +*cccc
  6. *cccc+
  7. 不正确的匹配将是

    1. -cc*c
    2. *-
    3. +
    4. +-
    5. 我到目前为止的正则表达式非常接近但不够接近:

      ^([\+\-]?)(\*?)([a-z0-9]*)([\+\-]?)(\1\4)$
      

4 个答案:

答案 0 :(得分:1)

也许更简单,像这样?

正则表达式1: ([+-]\S+)|(\S+[+-])

这将匹配以+-开头或以+-(或两者)结尾的任何字符串。 它不会检查只有一个+-,并且它本身或与任何空格不匹配+-

匹配-ccc+cccccc-ccc++ccc+-ccc++++++,{{1 }},但不是++而不是+

如果第一个字符为+\t\t+,则不允许最后一个字符为-+,反之亦然(字符串不会同时启动和以-+结束,你想做的事情

正则表达式2: -

这与([+-]\S*[^+\-\s])|([^+\-\s]\S*[+-])-ccc+++不匹配,但与+++++匹配。

要与班级内部的任何+++++a+不匹配,您需要

正则表达式3: -

哪个与([+-][^+\-\s]+)|([^+\-\s]+[+-])不匹配

修改:忘记转义字符类中的++++a

答案 1 :(得分:0)

我不知道为什么你的尝试或其他答案如此复杂。

这将执行标题要求:^([+-].*|.*[+-])$

还有更多你没有告诉我们的事吗?

答案 2 :(得分:0)

我认为当第一个和最后一个位置具有相同的字符时,OP想要匹配,这可以是 - 或+,例如-aaa-+aaa+但不是-aaa+。在这种情况下,这应该工作:

^([-+]).+\1$

这匹配[-+]为 - 或+字符( - 首先,因此它不被视为范围),然后是一些字符,然后是第一组。第一组是第一个字符,因为我们把它放在括号中。

示例:

$ echo '-aaaa-' | grep -P '^([-+]).+\1$'
-aaaa-

答案 3 :(得分:0)

归功于Kobi,但出于某种原因,他已经取消了答案。我已经编辑了一下

最终答案是

^(?:(?<UOMPrefix>[+-])(?<BCPrefix>\*?)(?<BarCode>\w+)|(?<BCPrefix>\*?)(?<BarCode>\w+)(?<UOMPrefix>[+-])|(?<BCPrefix>\*?)(?<BarCode>\w+))$

这考虑了可选(+ - )可选(*)(字符)可选(+ - )