我正在尝试编写一个正则表达式来匹配一个字符串形式:
"[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;
答案 0 :(得分:7)
我用
@"^[A-Za-z]{2}-[A-Za-z]{2}_.*$"
说明:
^
行首[A-Za-z]{2}
正好2个字符必须是a-zA-Z -
短划线_
下划线.*
任何角色$
行尾编辑:
答案 1 :(得分: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);
答案 2 :(得分:1)
我相信你想要的正则表达式是:
new Regex(@"^[A-Z][A-Z]-[A-Z][A-Z]_", RegexOptions.CaseInsensitive);
这应该捕获:
^[A-Z][A-Z]
开头两个字母字符
-
字面连字符字符
[A-Z][A-Z]
另外两个字母字符
_
字面下划线字符
您不能说要捕获此xml标记的全名,因此您不需要捕获.*$
"任何其他字符,直到字符串结束& #34;一部分。
答案 3 :(得分:1)
请参阅此正则表达式。
在nregex.com上测试
^[A-Za-z]+(-[A-Za-z]+_[A-Za-z]{2})$
这里的关键事项: -
这也执行捕获。