【问题标题】:c# regex long pattern with length test时间:2019-05-10 标签:c#regex long pattern with length test
【发布时间】:2016-06-09 11:23:56
【问题描述】:

我需要帮助在 c# 中使用正则表达式。我有一个字符串

a= lF-rwn-8343775
b= Mr. Roshan K. Gujarathi

我希望正则表达式模式匹配这个并在 c# 中获得一个布尔值我尝试过这样的模式

return Regex.IsMatch(a, @"([a-zA-Z])-([0-9])*$");
return Regex.IsMatch(b, @"([a-zA-Z]). ([a-zA-Z]) ([a-zA-Z]). ([a-zA-Z])*$");

我也尝试过return Regex.IsMatch(a, @"([a-zA-Z])-([a-zA-Z])-([0-9])*$");,但没有用

但这显示为假。我想匹配a中的长度,即,

第一个 2 char 然后 - 然后 2 char - 然后 8 int 和名称相同 2-4个字符然后。 10-15 个字符,然后是“空格”,然后是 1 个字符。然后是 10-15 个字符

【问题讨论】:

  • 我并没有完全按照你的要求,但在正则表达式中,你有 {min, max} 运算符。所以[a-z]{2,3} 表示最少 2 个,最多 3 个字母。
  • 将您的正则表达式粘贴到regex101 并检查说明,看看它们是否符合您的期望。
  • 感谢 cmets 但实际上我不知道所以问了一个问题抱歉...@npinti
  • 您忽略了第一个正则表达式中的“rwn”,这是故意的吗?

标签: c# .net regex


【解决方案1】:
  1. 在您的模式中使用锚点(^$
  2. 尽可能使用量词。
  3. 如果您不想使用分组匹配,请避免使用它们

所以,它应该是这样的:

return Regex.IsMatch(a, @"^[a-zA-Z]{2}-[a-zA-Z]{2}-[0-9]{8}$");
return Regex.IsMatch(b, @"^[a-zA-Z]{2,4}\. [a-zA-Z]{10,15} [a-zA-Z]\. [a-zA-Z]{10,15}$");

【讨论】:

  • 感谢@hjpotter92 的回答,这正是我正在寻找的,感谢您的帮助,谢谢
  • \\.?为什么要逃跑?
  • @ThomasAyoub . 本身将匹配正则表达式中的任何字符。要匹配文字句点. 字符,需要对其进行转义。
  • @Roshan 如果帖子有帮助,您可以选择它作为答案。
  • 我知道,我的问题被问得很糟糕,你为什么要在文字字符串中转义反斜杠? (另外,你忘了转义最后一个.
猜你喜欢
  • 1970-01-01
  • 2012-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-21
  • 1970-01-01
  • 2020-06-15
  • 2020-10-01
相关资源
最近更新 更多