【问题标题】:c# Regex to match end of string?c#正则表达式匹配字符串的结尾?
【发布时间】:2015-09-28 18:03:21
【问题描述】:

我需要帮助来生成正则表达式,以便它匹配具有以下详细信息的任何字符串:

  1. 字符串应该以括号结尾,并且里面只有数字。
  2. 结束括号应该只在行尾出现一次,而不是任何 还有什么地方。
  3. 括号开始前允许任何字符
  4. 括号结束后不允许有字符
  5. 字符串应该只包含一组带数字的括号,即没有像 (( 或 )) 这样的双括号

我试过这个.\([0-9]+\)$,但这不是我需要的。

例如:

以下字符串应该匹配:

asds-xyz (1)
asds+-xyz (12)
as@ds-xyz (123)

不应匹配以下字符串:

asds-xyz ((1)
asds-xyz ((12sdf))
(123) asds-xyz
xyz ((2)
XYX (1))
XYZ (1)(2)
xyz(1)BXZ
xyz(1)BXZ(2)

【问题讨论】:

    标签: c# regex


    【解决方案1】:
    ^[^\(\)]*\(\d+\)$
    

    将完成这项工作......

    \d = [0-9]

    【讨论】:

    • 谢谢。它与测试字符串一起工作正常。否定组是我所缺少的
    【解决方案2】:

    我尝试对您的模式进行最小的更改来修复: 您必须使用 [^ 键在您唯一需要的括号之前排除括号。像这样

    [^\(\)]*\([0-9]+\)$
    

    这会找到你喜欢的模式,如果你喜欢整个字符串都是这样的,那么只需在开头添加一个 ^

    【讨论】:

    • 它匹配 XYZ (1)(2)asds-xyz ((1)xyz ((2)xyz(1)BXZ(2),但不应该。
    • @Verarind 不,开头的 ^ 不会
    • 测试一下!您的正则表达式在任何时候都没有括号 [^\(\)] *。 Any 可能为零,并且在所有指定的情况下都会发生。但是第二个事实是,大括号应该出现在字符串中的任何位置,而不是末尾?你需要一个 ancor ^ 从一开始就不应该是一个支架。但是这个锚点不见了。
    【解决方案3】:

    从您的正则表达式开始:.\([0-9]+\)$ .匹配所有内容,但您需要量词。所以添加 * 到这个 .*\([0-9]+\)$ 但问题是,它会在最后一个括号之前匹配 ( 和 ),例如 xyz ((2) 所以为此做一个负集,最终结果:

    ^(.*[^\(\)])(\([0-9]+\))$
    

    【讨论】:

    • 它匹配 xyz(1)BXZ(2) 但不应该。
    猜你喜欢
    • 2011-09-23
    • 2021-01-17
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    • 2015-08-01
    • 1970-01-01
    相关资源
    最近更新 更多