Erstellung eines regulären Ausdrucks

31/12/2010 - 20:46 von adi | Report spam
Hallo! Ich brauche Hilfe bei der Erstellung eines regulàren Ausdrucks.
Ich habe eine Zeichenfolge,
z.B. 0110001000. Desweiteren habe ich ein Array mit Zahlen, die das
gesuchte Muster enthàlt, z.B {2,1}. Dies bedeutet es soll nach einem
Muster gesucht werden, welches zuerst zwei "1" und dann noch eine "1"
enthàlt, aber getrennt durch eine oder mehrere "0". Somit sollte für
das Besipiel Regex "true" liefern, für die Folge "0110001001" jedoch
"false", da an der letzten Stelle eine "1" steht.
Die "0" sind neutral, d.h. sie dürfen vo der ersten "1" und nach der
letzten "1" stehen.
Wie kann ich so einen regulàren Ausdruck definieren?
Danke für die Hilfe!
 

Lesen sie die antworten

#1 Thomas Scheidegger
31/12/2010 - 22:13 | Warnen spam
?Hallo adi

da dies hier eine C# NG ist,
zur Vollstàndigkeit eine mögliche Lösungsvariante mit Code,
vorausgesetzt binàres Prinzip und reduziertes Suchmuster auf 32 (ggf 64)-Bit
Zahlen abbildbar:

// - TEST
int[] pattern = new int[] { 2, 1, 3 };
string[] tests = new string[] { "11010111", "0110101110", "110000100000111",
"00110010011100", "000000000000000000000000000110101110",
"111111", "1101", "11010", "110101",
"1101011", "11010110" };

int search = GenerateSearchPattern(pattern);
for (int i = 0; i< tests.Length; i++)
{
string tst = tests[i];
bool match = search == StringToPattern(tst);
Console.WriteLine( "Test " + tst + " = " + match);
}

// -
static int GenerateSearchPattern(int[] pattern)
{
int val = 0;
for( int i = 0; i < pattern.Length; i++)
{
val = val << 1; // 0-separator
int ones = pattern[i];
for( int j = 0; j < ones; j++)
{
val = (val << 1) + 1;
}
}
return val;
}
// -
static int StringToPattern(string pattern)
{
int val = 0;
bool prev = false;
for (int i = 0; i < pattern.Length; i++)
{
bool digit = pattern[i] != '0';
if (digit)
{
if (!prev)
val = val << 1; // 0-separator
val = (val << 1) + 1;
}
prev = digit;
}
return val;
}


Thomas Scheidegger - 'NETMaster'
http://dnetmaster.net/

Ähnliche fragen