あなたは単一の正規表現ソリューションを求めていましたが、与えられた基準と例を使用して、文字列をカウントし、特定の文字タイプ(スペース)を無視する単一の正規表現を取得できませんでした。失敗はONCALのような文字グループで発生しました。これは一致として失敗するはずですが、合計文字数のために合格していました。
したがって、大文字が5つしかない文字グループが存在することを確認するには、2つの正規表現を使用する必要がありました。これは少し面倒で、文字列メソッドを使用すると、これをより速く、より簡単に行うことができました。
ソーステキストのフォーマットに関する確実性をリストできる場合、これは単一の正規表現で機能する可能性があります。たとえば、探している文字グループの前に常にダッシュがあり、ダッシュではない句読点で終わっているか、数字で終わっていることがわかっている場合です。
午後5時(--- FAIL(ダッシュが前に付いていない)
(CKI)--- FAIL(ダッシュが前に付いていない)
-DISC RSPNS SRVD0---合格
-印刷された発見:---合格
-ON CAL- --- FAIL(ダッシュで終了)
-審理の提出通知(---合格
-私たちの要求を送信しました(---合格
それを除いて、2つの方法のいずれかで結果を取得するコードを含めました。私は2番目が好きです。
String source1 = "02/02/12-02:45 PM(CKI)-DISC RSPNS SRVD 01/31/12-PRINTED
DISCOVERY:spina.bp.doc(DGB) 01/27/12-ON CAL-FILED NOTICE OF TRIAL(JCX) 01/24/12-SENT
OUR DEMANDS(Auto-Gen) 01/23/12- 02:31 PM-File pulled and given to KG for responses.(JLS) 01/20/12(PC)-rcd df jmt af ";
String assembledString;
public void bumbleBeeTunaTest()
{
String strippedString = source1.Replace(" ", "");
String regString1 = "";
String regString2 = @"([A-Z]{6,})";
String matchHold1,matchHold1First,matchHold1Last,matchHold1Middle;
Int32 matchHold1Len;
Regex regExTwo = new Regex(regString2);
MatchCollection regMatch2 = regExTwo.Matches(strippedString);
foreach (Match match2 in regMatch2)
{
matchHold1 = match2.Groups[1].Value;
matchHold1Len = matchHold1.Length;
matchHold1First = matchHold1.Substring(0,1);
matchHold1Last = matchHold1.Substring(matchHold1Len - 1,1);
matchHold1Middle = matchHold1.Substring(1, matchHold1Len - 2);
Debug.Print("Stripped String Matches - " + matchHold1);
regString1 = @"(" + matchHold1First + "[" + matchHold1Middle+ " ]{" + (matchHold1Len -1) + ",}" + matchHold1Last + ")";
Regex regExOne = new Regex(regString1);
MatchCollection regMatch1 = regExOne.Matches(source1);
regMatch1 = regExOne.Matches(source1);
foreach (Match match1 in regMatch1)
{
Debug.Print("Re-Assembled Matches :" + match1.Groups[1].Value.ToString());
}
}
// Does the same thing as the above. Just a little simpler.
for (int i = 0; i < source1.Length; i++)
{
if (char.IsUpper(source1[i]) | char.IsWhiteSpace(source1[i]))
{
assembledString += source1[i];
}
else
{
if (!string.IsNullOrEmpty(assembledString))
{
if (assembledString.Count(char.IsUpper) > 5)
{
Debug.Print("Non Reg Ex Version " + assembledString);
}
assembledString = "";
}
}
}
}
出力は次のようになります。
Stripped String Matches - DISCRSPNSSRVD
Re-Assembled Matches :DISC RSPNS SRVD
Stripped String Matches - PRINTEDDISCOVERY
Re-Assembled Matches :PRINTED DISCOVERY
Stripped String Matches - FILEDNOTICEOFTRIAL
Re-Assembled Matches :FILED NOTICE OF TRIAL
Stripped String Matches - SENTOURDEMANDS
Re-Assembled Matches :SENT OUR DEMANDS
Non Reg Ex Version DISC RSPNS SRVD
Non Reg Ex Version PRINTED DISCOVERY
Non Reg Ex Version FILED NOTICE OF TRIAL
Non Reg Ex Version SENT OUR DEMANDS