0

以下のような入力文字列があります。

john is a StartDate 10\11\2012 EndDate 15\11\2012 john is a boy john is StartDate john

上記の文字列から StartDate と EndDate の 2 つの日付を抽出したいと考えています。

ただし、StartDate という単語だけを検索することはできません。これは、文字列の末尾にあるように、StartDate が独立した単語として表示される可能性があるためです。日付を含む StartDate ワードが常に最初になるという保証がないため、最初のインスタンスを取ることはできません。

解決策は、パターン StartDate % EndDate % を一緒に検索することです。つまり、StartDate と EndDate の両方の単語を一緒にします。

これを達成するための最良の方法は何ですか?

私が考えることができる 1 つの解決策は、StartDate という単語のインスタンスごとに、次の 4 つの単語 (StartDate を含む) の部分文字列を取得し、その部分文字列で EndDate という単語を検索することです。存在する場合は、正しい部分文字列が得られます。それ以外の場合は、StartDate 単語の次のインスタンスに移動して、タスクを繰り返します。

4

3 に答える 3

1

正規表現で抽出する手っ取り早い方法 ( replaceFirst):

String input = "john is a StartDate 10\\11\\2012 EndDate 15\\11\\2012 john is a boy john is StartDate john";

String startDate = input.replaceFirst(".*(StartDate \\d{1,2}\\\\\\d{1,2}\\\\\\d{4}).*", "$1");
String endDate = input.replaceFirst(".*(EndDate \\d{1,2}\\\\\\d{1,2}\\\\\\d{4}).*", "$1");

System.out.println(startDate);
System.out.println(endDate);

日付のみが必要な場合:

String startDate = input.replaceFirst(".*StartDate (\\d{1,2}\\\\\\d{1,2}\\\\\\d{4}).*", "$1");
String endDate = input.replaceFirst(".*EndDate (\\d{1,2}\\\\\\d{1,2}\\\\\\d{4}).*", "$1");
于 2012-07-11T05:39:51.807 に答える
0

正規表現を使用して日付を照合します。

正規表現:.*?StartDate[ ]+(\d{2}\\\d{2}\\\d{4})[ ]+EndDate[ ]+(\d{2}\\\d{2}\\\d{4})).*

  • 上記の正規表現では、最初に一致したグループが開始日で、2 番目に一致したグループが終了日です。

Java で正規表現を使用する方法については、次のリンクを参照してください: http://docs.oracle.com/javase/tutorial/essential/regex/

于 2012-07-11T05:35:22.430 に答える
0

パターンが非常に明確に定義されているため、単純な正規表現を使用します。

String input = "john is a StartDate 10\\11\\2012 EndDate 15\\11\\2012 john is a boy john is StartDate john";
Matcher matcher = Pattern.compile("StartDate (.*?) EndDate (.*?) ").matcher(input);
if (matcher.find()) {
  startDate = matcher.group(1);
  endDate = matcher.group(2);
}
于 2012-07-11T05:36:00.013 に答える