C# で正規表現ライブラリを使用する以外に、正規表現についての知識はありません。これも、ネットから検索されたパターン マッチング式を使用します。
以下の 2 つの形式で日付と一致するように正規表現を使用したいと思います。年の部分は必要ありません。
8 October
また8 Oct
September 19
またSep 19
Google を検索しても解決しませんでした。
C# で正規表現ライブラリを使用する以外に、正規表現についての知識はありません。これも、ネットから検索されたパターン マッチング式を使用します。
以下の 2 つの形式で日付と一致するように正規表現を使用したいと思います。年の部分は必要ありません。
8 October
また8 Oct
September 19
またSep 19
Google を検索しても解決しませんでした。
TryParseExact
フレームワークがまさにそれを行うように設計されたメソッドをすでに提供しているのに、なぜ正規表現に苦労するのですか?
public class Program
{
static void Main()
{
var str = "8 October";
DateTime date;
var formats = new[] { "d MMMM", "d MMM" };
if (DateTime.TryParseExact(str, formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out date))
{
Console.WriteLine(date);
}
else
{
Console.WriteLine("The date was not in one of the 2 supported formats 'd MMMM' orr 'd MMM'");
}
}
}
文化を意識したものにすることもできます。たとえば、サイトにフランス語を話すユーザーがいて、8 Octobre
おそらく8 October
.
この場合、現在のカルチャを指定するか、特定のカルチャを強制することができます。
var str = "8 Octobre";
DateTime date;
var formats = new[] { "d MMMM", "d MMM" };
var ci = new CultureInfo("fr-FR");
if (DateTime.TryParseExact(str, formats, ci, DateTimeStyles.None, out date))
{
// use the date instance here
}
詳細情報:カスタムの日時形式。
string Date = "December 8"
MatchCollection MC = Regex.Matches(Date, @"(?i)([\d]{1,2}(\s)?(January|Jan|February|feb|March|mar|April|Apr|May|June|July|August|Aug|September|Sep|October|Oct|November|Nov|December|Dec))|(January|Jan|February|feb|March|mar|April|Apr|May|June|July|August|Aug|September|Sep|October|Oct|November|Nov|December|Dec)(\s)?[\d]{1,2}");
正規表現を使用する必要がある場合は、これを試してください
((?<Day>\d\d?) (?<Month>[A-Z][a-z]+))|((?<Month>[A-Z][a-z]+) (?<Day>\d\d?))
この正規表現を試してください:
(?<month>[a-zA-Z]+)\s+(?<day>\d+)|(?<day>\d+)\s+(?<month>[a-zA-Z]+)
および次の名前のグループを取得します:day
およびmonth
より大きな文字列で日付を見つけるには、次のようにします。
\b(?:\d{1,2}\s(?:Jan|Feb|Sep|Oct)(?:[a-z]+\b)?|(?:Jan|Feb|Sep|Oct)(?:[a-z]+\b)?\s\d{1,2})\b
オプションと一緒にIgnoreCase
。
そして、結果の文字列をDarin Dimitrov が提供するメソッドでテストします
もちろん、略語のリストを完成させる必要があります。テスト用に一部だけ追加しました。
ここでRegexrを参照してください