gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 15:04:42 24 4
gpt4 key购买 nike

我正在尝试创建一个可在 C# 中使用的正则表达式,它允许我获取单个字母和/或字母组的列表,并确保单词仅由该列表中的项目组成。例如:

  • “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();
}

我对正则表达式有非常基本的了解,所以如果我在这里遗漏了一些明显的东西,我深表歉意:)

更新我不明白为什么你的反例是反例: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");

关于c# - 如何创建正则表达式以确保单词仅由给定的单个字母和字母组组成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/378524/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com