Klepałem kod ostatnio, bo uznałem że w Regexy są passé i nie znam jakiejś alternatywy, a jako że po co tracić 5min na szukanie, gdy można poklepać pół łikendu, to powstało takie coś
YetAnotherStringMatcher library tries to make string matching easier, more readable while being somewhat expressive.
It tries to replace Regex to some extent, mostly when it comes to relatively basic cases.
For now it is in very early version and apart from the errors, then it may lack of "obvious things" and be kinda inconsistent in its APIs - mostly due to maintainer being retard.
// Polish Postal Code
var input = "12-345";
var result = new Matcher(input)
.MatchDigitsOfLength(2)
.Then("-")
.ThenDigitsOfLength(3)
.Check();
Assert.True(result.Success);
var matcher = new Matcher("[2021-09-05] ERROR: Message1! Exception!")
.Match("[2021-09-05]")
.ThenAnything()
.Then("Exception!")
.Check();
Assert.True(matcher.Success);
var input = new List<string>
{
"[2021-09-05] ERROR: Message1",
"[2021-09-05] WARNING: Message1",
"[2021-09-05] INFO: Message1",
"[2021-09-07] WARNING: Message1",
};
var pattern = new Matcher()
.Match("[2021-09-05] ")
.ThenAnyOf("WARNING:", "ERROR:");
Assert.True(pattern.Check(input[0]).Success);
Assert.True(pattern.Check(input[1]).Success);
Assert.False(pattern.Check(input[2]).Success);
Assert.False(pattern.Check(input[3]).Success);
var matcher = new Matcher("Apple Watermelon")
.MatchAnyOf("Apple", "Banana")
.Then(" ")
.ThenAnyOf("Giraffe", "melon", "Watermelon")
.Check();
Assert.True(matcher.Success);
var matcher = new Matcher("TEST")
.Match("test").IgnoreCase()
.Check();
Assert.True(matcher.Success);
// Sample Phone Number / Reusable Pattern
var input = new List<string> { "+123 345 67 89", "+1424 345 67 89" };
var pattern = new Matcher()
.Match("+")
.ThenDigitsOfLength(3)
.Then(" ")
.ThenDigitsOfLength(3)
.Then(" ")
.ThenDigitsOfLength(2)
.Then(" ")
.ThenDigitsOfLength(2);
Assert.True(pattern.Check(input[0]).Success);
Assert.False(pattern.Check(input[1]).Success);
var result = new Matcher("Apple Pineapple")
.Match("Apple ")
.Then("Coconut ").IsOptional()
.Then("Pineapple")
.Check();
Assert.True(result.Success);
Kod, Dokumentacja API z przykładami: https://github.com/xd-loler/YetAnotherStringMatcher
Mięso: https://github.com/xd-loler/YetAnotherStringMatcher/tree/master/src/Core
Testy: YetAnotherStringMatcher/src/Tests/BasicTests.cs/dev/null
możecie pohejtować, możliwe że są bugi/dziwne zachowanie :) jak i również podrzucić jakiś pomysł nt. jakie operacje waszym zdaniem takie narzędzie powinno być w stanie realizować?