在大字符串中查找令牌

时间:2013-05-27 00:01:17

标签: c# regex

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

Detect particular tokens in a string. C#

这看起来很完美!唯一的问题是没有用。这个问题和我的问题之间的区别在于,不是使用#\ w +#而是需要使用[[\ w +]]。这是我的代码(某人是我的大字符串):

        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]]

有什么想法吗?

3 个答案:

答案 0 :(得分:5)

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

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

Regex reg = new Regex(@"\[\[\w+\]\]");

答案 1 :(得分:3)

这将是一个使用DAFSA的绝佳机会,{{3}}是一种没有有效载荷的Trie形式。高效,O(n)查找大字符串中的短语。

答案 2 :(得分:-2)

您可以在regex中考虑命名令牌。例如 ((((邮政信箱| 2 PO \ SBOX)\ S * \ d *)),\ S?)((((\ W \ d \ S \,] )),\ S???? )?((?([\ w \ s - ] \ w \ s(st \ s)?[\ w] \ s(街道| 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?)?((?(Victoria | VIC |新南威尔士州| NSW |南澳大利亚州|南澳大利亚州|北领地| NT |西澳大利亚州|华盛顿州|塔斯马尼亚州| TAS | ACT |昆士兰州| QLD))\ s *)?(?(\ d {4}),?\ s?)?(?(澳大利亚))?

28 Lidco Street,Arndell Park,Sydney 2148

要评估您的regx表达式,在http://www.codeproject.com/Articles/3669/Expresso-A-Tool-for-Building-and-Testing-Regular-E

使用Expresso - 构建和测试正则表达式的工具非常方便