我正在尝试在C#中创建一个可使用的Regex,这将允许我获取单个字母和/或字母组的列表,并确保单词仅由该列表中的项目组成。例如:
“ a”将匹配“ a”,“ aa”,“ aaa”,但不匹配“ ab”
“ a b”将匹配“ a”,“ ab”,“ abba”,“ b”,但不匹配“ abc”
“ a b abc”将匹配“ a”,“ ab”,“ abc”,“ aabc”,“ baabc”,但不匹配“ ababac”
我认为某种形式
(a|b|abc)*
可以,但是与上一项不正确匹配。这是我正在测试的代码:
[Fact]
public void TestRegex()
{
Regex regex = new Regex("(a|b|abc)*");
regex.IsMatch("a").ShouldBeTrue();
regex.IsMatch("b").ShouldBeTrue();
regex.IsMatch("abc").ShouldBeTrue();
regex.IsMatch("aabc").ShouldBeTrue();
regex.IsMatch("baabc").ShouldBeTrue();
// This should not match ... I don't think anyway
regex.IsMatch("ababac").ShouldBeFalse();
}
我对regex有一个非常基本的了解,如果我在这里缺少明显的东西,很抱歉:)
更新资料
我不明白您的反例为何是反例:ababac = a b a bac。 c您能澄清一下吗?
我只想使用“ a”,“ b”和“ abc”-“ bac”将是一个完全不同的术语。
让我举另一个例子:使用“ ba”和“ t”,我可以匹配单词“ bat”,但不能匹配“ tab”。字母组中字母的顺序很重要。
(使用Diadistis解决方案进行测试)
[Fact]
public void TestRegex()
{
Regex regex = new Regex(@"\A(?:(e|l|ho)*)\Z");
regex.IsMatch("e").ShouldBeTrue();
regex.IsMatch("l").ShouldBeTrue();
regex.IsMatch("ho").ShouldBeTrue();
regex.IsMatch("elho").ShouldBeTrue();
regex.IsMatch("hole").ShouldBeTrue();
regex.IsMatch("holle").ShouldBeTrue();
regex.IsMatch("hello").ShouldBeFalse();
regex.IsMatch("hotel").ShouldBeFalse();
}
参考方案
我不太确定您要做什么,但是为了使最后一个为假,您应该检查字符串是否可以完全匹配:
Regex regex = new Regex(@"\A(?:(a|b|abc)*)\Z");
用大写字母拆分字符串,但忽略AAA Python Regex - python我的正则表达式:vendor = "MyNameIsJoe. I'mWorkerInAAAinc." ven = re.split(r'(?<=[a-z])[A-Z]|[A-Z](?=[a-z])', vendor) 以大写字母分割字符串,例如:'我的名字是乔。 I'mWorkerInAAAinc”变成…
当回复有时是一个对象有时是一个数组时,如何在使用改造时解析JSON回复? - java我正在使用Retrofit来获取JSON答复。这是我实施的一部分-@GET("/api/report/list") Observable<Bills> listBill(@Query("employee_id") String employeeID); 而条例草案类是-public static class…
Mongo汇总 - javascript我的收藏中有以下文件{ "_id": ObjectId("54490b8104f7142f22ecc97f"), "title": "Sample1", "slug": "samplenews", "cat": …
如何在Wiremock中为JUNIT匹配精确的json - java我正在使用Wiremock在Spring启动应用程序中模拟Junit的REST服务。我的问题是,我无法匹配多个匹配模式。 Junit.javaStringValuePattern pattern = WireMock.matching(".*"); givenThat(post(urlEqualTo("/softwares…
正则表达式,排除某些单词以外的所有单词 - c#我虽然过滤像这样的字符串:"Hello <strong>plip</strong> plop"获得"plip plop",也就是说,使用此C#行可以轻松排除“ plip”和“ plop”以外的所有单词:new Regex("[^(plip)(plop)]").Replace(…