c#如何在字符串中查找特定模式?
我有一个包含字母和数字的字符串。此字符串还包含我要提取的日期 示例:c#如何在字符串中查找特定模式?,c#,string,pattern-matching,C#,String,Pattern Matching,我有一个包含字母和数字的字符串。此字符串还包含我要提取的日期 示例:anv749dld95hd01/01/2012ncjf739dkcju 我想获取包含以下内容的新字符串:01/01/2012 我唯一想到的是使用:str.split('/') 这样我将得到一个数组并处理每个单元格-取第一个单元格的最后两个字符,获取第二个单元格的值,然后从第三个单元格中获取前4个字符 有更好的方法吗?使用正则表达式查找模式并返回所需字符串。您可以使用正则表达式: using System; using Syste
anv749dld95hd01/01/2012ncjf739dkcju
我想获取包含以下内容的新字符串:01/01/2012
我唯一想到的是使用:str.split('/')
这样我将得到一个数组并处理每个单元格-取第一个单元格的最后两个字符,获取第二个单元格的值,然后从第三个单元格中获取前4个字符
有更好的方法吗?使用正则表达式查找模式并返回所需字符串。您可以使用正则表达式:
using System;
using System.Text.RegularExpressions;
class Test
{
static void Main()
{
var input = "anv749dld95hd01/01/2012ncjf739dkcju";
var regex = new Regex(@"\d{2}/\d{2}/\d{4}");
var match = regex.Match(input);
if (match.Success)
{
Console.WriteLine("Got match: {0}", match.Value);
}
else
{
Console.WriteLine("No match found");
}
}
}
(您可以调用Match.NextMatch
检查是否只有一个匹配项。)
要将其解析为日期时间
,您可以使用如下内容:
string dateText = match.Value;
DateTime date;
if (DateTime.TryParseExact(dateText, "dd/MM/yyyy",
CultureInfo.InvariantCulture,
DateTimeStyles.None, out date))
{
// Use date
}
else
{
// Couldn't parse the value
}
(我们无法判断它是指dd/MM/yyyyy
还是MM/dd/yyyy
;根据需要进行调整。)
如果需要,您还可以进一步收紧正则表达式,例如月份的第一个数字必须是0或1,而一天的第一个数字必须是0、1或2。实际上,这取决于数据是什么样子。您可以使用,您可以找到第一个正斜杠,并在前面开始两个字符的子字符串,然后取十个字符
string date = str.Substring(s.IndexOf('/')-2, 10);
您可以使用解析子字符串来确保是否得到了正确的子字符串
bool isParsed = DateTime.TryParseExact(date, "dd/MM/YYYY", CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out x1);
是的,您可以使用Regex1)此字符串是否包含任何unicode字符?2) 格式总是
dd/mm/yyyy
还是应该取决于区域设置?基于示例\d{2}/\d{2}/\d{4}@ArsenMkrt:Doh,是的,已修复。值得指出的是,这是针对看起来像日期的事情,OP应该检查匹配项以进行检查。@AlexK://当然,可以。如果字符串不包含模式怎么办?正则表达式甚至需要模式,不是吗?您可以通过匹配来检查匹配是否存在以及模式是否成功。成功但正则表达式不会失败,而子字符串(-3,…
将失败,如果日期不存在,并且给定的子字符串可以被解析以验证