首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RegEx不接受空格

RegEx不接受空格
EN

Stack Overflow用户
提问于 2016-07-19 03:24:23
回答 1查看 88关注 0票数 0

嗨,我有一个要求,其中的一堆表达式不应该被接受,其中包括空格以及。

以下是表达方式。

  1. PA#N<number>.<number>#ADP<number> (例如PA#N1.1#ADP1 )
  2. PA#N<number>.<number>,<number>.<number>#ADP<number> (例如PA#N1.1,1.2#ADP1,2 )
  3. PA#N<number>#ADP<number> (例如PA#N1#ADP4 )
  4. PA#N<number>,<number>#ADP<number> (例如PA#N1,2#ADP4 )
  5. PA#N<number>,<number>.<number>,<number>#ADP<number>例如PA#N1,2.1,3#ADP1
  6. PA#N<number>,<number>.<number>-<number>#ADP<number> (例如PA#N1.1-3#ADP1 )
  7. PA#N<number>,<number>.<number>-<number>.<number>#ADP<number> (例如PA#N1.1- 3.2#ADP1,2 )
  8. PA#NUAL,AZ,AN#FOP<number>
  9. PA#N1.1-2.1,3.1#ADP#PUSH
  10. PA*N1.1*ADP

如果它在PA#<space>N<space>1<space>1#ADP上有任何空格也是不可接受的,但是PA#N1.1...#5#SOME TEXT (在最后的'#‘后面有自由文本的SOME TEXT部分是可以接受的)。

PA*也不可接受。

为了满足上述所有条件,我创建了一个regex。

代码语言:javascript
复制
PA(?!\*$)(?!([#*].*\s+).*)(?!(\*N(\d+(\.\d+)?,?)+)$)(?!([#*](U.*|T.*|(N\d+\.?\d*)-(\d+\.?\d*)|(N(\d+(\.\d+)?,?)+))){1,3}[#*]ADP).*

所有上述条件都与上述正则表达式相匹配,唯一缺少的是PA#N1.1#5#FREE TEXT (如果在FREE<SPACE>TEXT之间给出任何空间,那么它就是不接受的。

如果我们在FREE TEXT (比如FREETEXT )之间没有任何空间,那么这与上面的正则表达式相匹配。

有人能帮我找出我的错误吗?正确的表述是什么?这两天我一直在挣扎。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-19 08:54:37

为了简化解决方案,我建议两件事:

  1. 假设PA#N#ADP之间的所有组合都可以描述为一系列1到6个数字,这些数字由醚.,-分隔,并可选择地被空格包围。这可以由\s*\d+\s*(?:[\.,-]\s*\d+\s*){0,5}表示。我不确定这个假设是否为您所接受,但如果是的话,这将大大简化正则表达式。如果这个假设是不可接受的,我在答案的末尾提供了一个扩展正则表达式的链接。
  2. 编写一个模式来匹配您必须排除的所有字符串,然后使用描述的here方法将其反转。简单地说,它看起来如下:/^((?!INVERTED_PATTERN).)*$/

这种情况下的表述是:

代码语言:javascript
复制
^((?!      # This and the final line allow invert the regex condition

PA(?:
    \*(?:N\s*\d+\s*\.\s*\d+\s*\*ADP)?    # match the asterisk cases
  | \#\s*N\s*\d+\s*                      # or the hash cases
        (?:[\.,-]\s*\d+\s*){0,5}
    \#ADP\s*(?:\d|\#PUSH)
  | \#NUAL,AZ,AN\#FOP\d                  # or the 'UAL,AZ,AN' literal
)

).)*$

注意:这个正则表达式需要使用x修饰符。

演示:https://regex101.com/r/bY4xU6/3

如果第一个假设是不可接受的,您可以在这里使用更详细的正则表达式:https://regex101.com/r/oD8uG7/1

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38449083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档