2

嗨,我需要在一个大字符串中找到所有匹配项,我发现了这个问题

检测字符串中的特定标记。C#

这看起来很完美!唯一的问题它不起作用。这个问题和我的不同之处在于,我需要使用 [[\w+]],而不是使用 #\w+#。这是我的代码(sb 是我的大字符串):

        Regex reg = new Regex(@"[[\w+]]");
        foreach (Match m in reg.Matches(sb.ToString()))
        {
            RenderHtmlRecursive(helper, sb, path, m.Value);
        }

当我运行它时,我得到 1 个匹配项:) 但值为 (m.Value): "t]"

sb 是(暂时的小文本):卡片卡片 [[RegisterText]]

有任何想法吗?

4

3 回答 3

5

[]是正则表达式中使用的特殊字符,如果您希望匹配该字符,则需要对其进行转义。

只需将其更改为以下内容即可;

Regex reg = new Regex(@"\[\[\w+\]\]");
于 2013-05-27T00:09:27.467 回答
3

这将是使用DAFSA的绝佳机会, DAFSA是一种没有有效载荷的 Trie。对大字符串中的短语进行高效的 O(n) 查找。

于 2013-05-27T02:16:56.637 回答
-2

您可以在正则表达式中考虑命名令牌。例如 ((?((POBox|PO\sBox)\s*\d*)),?\s?)?(((?([\w\d\s\,] )),\s?) ?( (?([\w\s-] \w\s(st\s)?[\w] \s(street|st|road|rd|close|cl|avenue|ave|av|path|ph ) |drive|drv|LOOP|COURT|CT|CIRCLE|LANE|LN)) ),?\s?))?((?([\p{Ll}\p{Lu}\p{Lo}\p{ Pc}\p{Lt}\p{Lm}\s] )),?\s?)?((?(维多利亚|VIC|新南威尔士|NSW|南澳大利亚|SA|北领地|NT|西澳大利亚|WA|塔斯马尼亚|TAS|ACT|昆士兰|QLD))\s*)?(?(\d{4}),?\s?)?(?(澳大利亚))?

28 Lidco Street, Arndell Park, Sydney 2148

要评估您的 regx 表达式,可以方便地使用 Expresso - 一种用于构建和测试正则表达式的工具,网址为http://www.codeproject.com/Articles/3669/Expresso-A-Tool-for-Building-and-Testing-正则-E

于 2013-05-27T00:31:34.280 回答