我正在寻找一种方法来决定一个正则表达式是否匹配整个字符串,字符串的开头或C#中的一部分。
在Java中,您可以构造一个Matcher
对象,并使用方法matches()
检查它是否与整个输入匹配,lookingAt()
以查看它是否与开头匹配输入,find()
以查看串联内是否有任何匹配。
在.NET中,我可以使用Match.Success
查看是否有匹配项,并针对上述条件选中Match.Index
和Match.Length
。
问题是,如果找到较小的匹配,它不会尝试匹配整个输入。例如,如果输入“1234”显示给正则表达式@"\d{2}|\d{4}"
,则它将匹配前两位数字。
在这种情况下,我需要使用模式Regex
构建另一个@"^(\d{2}|\d{4})$"
来测试整个输入,然后测试另一个以查看它是否与开头匹配。
是不是有办法告诉同一个Regex
类更喜欢整个输入匹配,这样我就不需要为此创建(并编译)另一个正则表达式了?
编辑:问题不在于模式,它只是一个展示我的意思的例子。
答案 0 :(得分:2)
不,在.NET中没有“开头只匹配”或“只匹配整个字符串”的正则表达式方法。您需要使用锚点构建此行为。
在某种程度上,由于两个原因,我比Java更喜欢这个:
.matches()
弄糊涂了,因为他们不知道它必须匹配整个字符串。关于这个确切的问题,我至少看过十几个问题。re.search()
与re.match()
* )进行通信。 也就是说,它也很容易做到:
@"\A(?:"
+原始正则表达式+ ")"
- > lookingAt()
(现在谁想到那个名字)?@"\A(?:"
+原始正则表达式+ @")\z"
- > matches()
* re.match()
的行为与Java的lookingAt()
相似,而不像matches()
,以防您想知道。
答案 1 :(得分:0)
Regex.Match / Regex.IsMatch?
它返回带有子集合的Match对象。
请参阅http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.match.aspx