2017-03-04 173 views
-2

我真的很陌生,所以我正在寻找一种方法来检查我的字符串是否以某个正则表达式开始。我在互联网上发现了this,但是,我无法使它与自定义正则表达式一起工作。检查字符串是否以正则表达式开始

我需要知道,如果一个特定的符合

3.3. XXX 

开始这就是你如何格式化德国日期。所以,正则表达式并不需要查找仅这一点,但可能

17.4. XXX 

在这两种情况下,我需要知道,如果输入的字符串与日期开始(其中有两个可能的符号,如上文所述) 。因此,对于这两种情况它都会返回true,但是,它不会为此:

15G 

(例如)。

哪个正则表达式适合这样做?

+0

你尝试过这样一个有效的日期远? – revo

+1

如果您打算解析日期,那么最好使用[Parse](https://msdn.microsoft.com/en-us/library/1k1skd40(v = vs.110).aspx)或其[overload] (https://msdn.microsoft.com/en-us/library/kc8s65zs(v=vs.110).aspx)。 – cassandrad

+0

为什么你说这是一个*时间*,但最后说,字符串以* date *开头? –

回答

1

正则表达式是不擅长解析数范围,使得它可以得到相当混乱https://stackoverflow.com/a/15504877/1383168

要检查一个字符串是否是你可以使用DateTime.TryParseExact

string s = "17.4. XXX"; DateTime d; 

if (DateTime.TryParseExact(s.Split(' ')[0], "d.M.", 
    System.Globalization.CultureInfo.InvariantCulture, 
    System.Globalization.DateTimeStyles.None, out d)) 
{ 
    // matches 
    Debug.Print($"{d}"); // "4/17/2017 12:00:00 AM" 
} 
+0

非常好的和干净的解决方案,适用于所有的日期,并不需要手动正则表达式检查。谢谢! –

1

如果你想要一个正则表达式来检测dd.mm类型的日期这就是你的答案。

string testregex = "([0-2][0-9]|3[0-1]|[0-9])(.)(0[1-9]|1[0-2]|[0-9])(.)"; 

您可以检查任何字符串找到匹配这个表达式,Regex.IsMatch()返回true,并且在有块将执行语句。

string text="17.4 xxxxxx"; 
if (Regex.IsMatch(string test,testregex)) 
{ 
    //do something 
} 
+1

“'给我更多明确的评论细节”。不要这样做,请尽量使用所有相关详细信息和示例更新您的问题。 **当然,每个正则表达式问题至少应该包含几个应该通过的例子,哪些应该失败,以及为什么**。在更新问题之后,回答问题已更新的答案也很好。 –

+0

我可以看到你放上'17.4',但不是'17.4.',这是必需的。正如我所看到的,在正则表达式的末尾丢失了点(。)。你打算这么做吗?无论如何感谢您的回答。 –

+0

总是有一个点(。)在目标字符串的末尾?如果是,请通知我,然后在我的答案中编辑正则表达式。 –

相关问题