如何创建正则表达式以确保单词仅由给定的单个字母和字母组组成? - c#

我正在尝试在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(…