【问题标题】:regex match string agasint a pattern正则表达式匹配字符串与模式
【发布时间】:2014-05-21 14:20:20
【问题描述】:

我是正则表达式的新手。

我要归档的是检查字符串文本是否与以下模式匹配。

"xxx(name="yyy", country="yyy")"

已编辑: xxx 可以是任意长度的字母或数字,但必须以字母开头。 yyy 可以是任意长度的任意字符。 "," 和 "country" 之间可以有零个或任意数量的空格。

例如,下面是一个有效的字符串

"TargetVal(name="White House", country="US")"

以下字符串无效

"TargetVal(name="White House", country="US")+546+!!!"
"343TargetVal(name="White House", country="US")"
"!TargetVal(name="White House", country="US")"
"CenterVal(name="Green House",789808 country="US")"
"CenterVal(name="Green House", country="US", dfjl)"
"OuterVal(name=Green House, country="US")"

这是我迄今为止在 C# 中所做的工作

var formula = @"TargetVal(name=""White House"", country=""US"")";
var pattern = @"\w\(name=""\w"",\sccy=""\w""\)";
ismatching= Regex.IsMatch(formula, pattern, RegexOptions.IgnoreCase);

显然,它并不符合所有指定的规则。谁能给点提示?

【问题讨论】:

  • 正则表达式字符类如\s\w 只匹配一个字符,除非您添加修饰符。因此,在您的示例中,您正在寻找一个单词字符、一个空格等等。使用*(匹配0个或更多)和+(匹配一个或多个)等修饰符。
  • 构建正则表达式的一种方法,特别是如果您刚刚开始,是从您的精确匹配字符串开始。确保匹配成功。然后开始用正则表达式替换常量值。
  • 谢谢,这个建议很有帮助

标签: c# regex string pattern-matching match


【解决方案1】:

您可以使用以下正则表达式。

var rgx = new Regex(@"(?i)^[a-z][a-z0-9]+\(name="".*?"",\s*country="".*?""\)$");

Demo

【讨论】:

    【解决方案2】:

    试试var pattern = "^[a-zA-Z][a-zA-Z0-9 ]+\\(name=\"[a-zA-Z][a-zA-Z0-9 ]+\",\\s*country=\"[a-zA-Z][a-zA-Z0-9 ]+\"\\)$";

    我假设您的xxx 不仅存在于字母和数字中,还可能包含空格(因为White House 确实包含它们)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-14
      • 2015-06-29
      • 2021-12-08
      • 2014-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多