1

我正在尝试编写一个正则表达式来匹配一种形式的字符串:

"[A-Za-z][A-Za-z]-[A-Za-z][A-Za-z]_[match all chars]"

我要匹配的字符串必须是这种形式,包括连字符和下划线。到目前为止,我有:

Regex regEx = new Regex(@"[A-Za-z]+(-[A-Za-z]+)+*$", RegexOptions.IgnorePatternWhitespace);

我不确定如何添加下划线字符以便匹配。

此元素是我希望匹配的 XML 元素;我还想检索这个元素的内容。我怎么能这样做?

var newVar = from e in doc.Descendants("DocumentElement").Descendants() 
                         where regEx.IsMatch(e.Name.LocalName) 
                        select e;
4

4 回答 4

7

我会用

@"^[A-Za-z]{2}-[A-Za-z]{2}_.*$"

解释:

  • ^行首
  • [A-Za-z]{2}正好 2 个字符必须是 a-zA-Z
  • -破折号
  • _下划线
  • .*任何字符
  • $队伍的尽头

编辑:

另请参阅正则表达式文档

于 2012-04-19T09:44:23.453 回答
2

您的示例模式使用 + 修饰符,它是“超过 1”,而不是 2。它会比您想象的更匹配。

Regex regEx = new Regex(@"^[A-Za-z]{2}-[A-Za-z]{2}_.*$", RegexOptions.IgnorePatternWhitespace);

或者也只是设置不区分大小写的选项:

Regex regEx = new Regex(@"^[a-z]{2}-[a-z]{2}_.*$", RegexOptions.IgnorePatternWhitespace | RegexOptions.IgnoreCase);
于 2012-04-19T10:01:43.073 回答
1

我相信你想要的正则表达式是:

new Regex(@"^[A-Z][A-Z]-[A-Z][A-Z]_", RegexOptions.CaseInsensitive);

这应该捕获:
^[A-Z][A-Z]开头
-的两个字母字符 文字连字符
[A-Z][A-Z]两个更多
_的字母字符 文字下划线字符

您不会说要捕获此 xml 标记的整个名称,因此您不需要捕获.*$“任何其他字符直到字符串结尾”部分。

于 2012-04-19T09:47:02.913 回答
1

请参阅此正则表达式。

在 nregex.com 上测试

^[A-Za-z]+(-[A-Za-z]+_[A-Za-z]{2})$

这里的关键点:-

  • 字符串的最后一部分限定为 2 个字符(如果您不完全关心 2 个字符,请将其替换为 +)。

这也执行捕获。

于 2012-04-19T09:47:28.243 回答