c# - 在动态方法中使用正则表达式

标签 c# regex

今天我可以做硬编码,但后来我想改变它,字符串单词模式可以应用在@"\bfood\b"的一侧。我想在不使用硬编码的情况下将其变成动态的

在未来我想用“鸡”这个词而不是“食物”。

我尝试将代码 "@"\bfood\b" 替换为 @"\b"+ pattern +"\b" 但它不起作用.

    string inputText = "food ddd dd";

    string dddd = "\bfood\b";

    string pattern = "food";
    Regex rx = new Regex(@"\bfood\b", RegexOptions.None);
    MatchCollection mc = rx.Matches(inputText);

    if (rx.Match(pattern).Success)
    {
        int dd = 3;
    }

最佳答案

你应该使用

@"\b" + Regex.Escape(pattern) + @"\b"

或者更通用的:

@"(?<!\w)" + Regex.Escape(pattern) + @"(?!\w)"

或使用 string.format :

Regex rx = new Regex(string.Format(@"\b{0}\b", Regex.Escape(pattern)), RegexOptions.None);

或者用字符串插值:

Regex rx = new Regex($@"(?<!\w){Regex.Escape(pattern)}(?!\w)", RegexOptions.None);

现在,我为什么建议 (?<!\w)(?!\w)环顾四周?因为这些是不依赖上下文的单词边界。如果您决定通过 |border| 怎么办?图案? \b\|border\|\b很可能无法匹配您打算匹配的大多数情况,因为 \b将要求在第一个 | 之前出现一个单词字符在最后一个 | 之后.环视将匹配 |border|仅当未包含单词字符时才为字符串。

关于c# - 在动态方法中使用正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35702167/

相关文章:

c++ - 如何使用boost C++解析8位十六进制数和字符串?

Javascript 正则表达式匹配以某些字符结尾但不以这些字符的特定组合结尾的字符串

javascript - 去除 HTML 标签内不脏的 HTML 文本 Javascript

regex - 让所有正则表达式匹配出现在列表框中,VB.NET

c# - 在 WPF 中将形状转换为可重用的几何图形

c# - 确认邮件

c# - LINQ 方法执行序列

c# - 有没有使用代码模板的语言?

ios - 在 Swift 3 中使用 switch 语句构建正则表达式

c# - 系统编程语言和应用程序编程语言之间的区别