正则表达式解析任何不是A \ b

时间:2012-05-30 19:12:05

标签: .net regex

我需要一些文本文件来突破单个单词。但是对于一个非常宽松的词语定义。

\b似乎正确识别边界,但因为它是零宽度^ \ b不做任何事情。

我知道.NET string.parse可能更快,但我也需要匹配位置。

我最终得到的结果如下所示。当^非零时,我想打破。添加了想要忽略中断的日期,电子邮件和URL。

我知道解决方案与我原来的问题陈述不太接近。它进化了。谢谢大家的帮助。

    String line;
pattern = @"\w+@\w+|[01]?\d\/[0123]?\d\/([12]\d)?\d\d|https?:\/\/(?:\w+\.){1,3}\w+|[^\s\.\\///?!()@,]{2,200}";
    while ((line = sr.ReadLine()) != null)
    {
        Debug.WriteLine(line);
        foreach (Match match in Regex.Matches(line, pattern, RegexOptions.IgnoreCase))
        {
            Debug.WriteLine(match.Index.ToString() + " " + match.Value);
        }
        break;
    }

5 个答案:

答案 0 :(得分:1)

\w匹配字母,数字和_(下划线)。 \b匹配\w个字符与\W(非字字符[^\w])之间的边界。 \B一个边界(它总是零宽度),所以\B+毫无意义。

修改:我仍然无法准确理解您想要分解的位置。

如果您想匹配除.(句点)和空格以外的任何内容,请尝试使用排除方法:

[^.\s]+

如果您想要包含特定字符,请尝试使用包含方法:

[-\w`~!@#$%^&*\[\]()\\\/]+

答案 1 :(得分:1)

不是一个单词边界\B会引用相同的相邻项目,即其他单词或不单词。

您似乎想要\b(\w+|\W+)\b,因为((?:\B.\B)+)会留下相同的结尾字符。

编辑:

你更新..

You could split with this [^\p{L}] *\p{Z} [^\p{L}]* or use  

(dosen't account for graphines) 
[\s\pP]* ([\pL\pN_-] (?: [\pL\pN_-] | \pP(?=[\pL\pN\pP_-]) )* )
  or
[\s[:punct:]]* (\w (?: \w | [[:punct:]](?=[\w[:punct:]]) )* )  

两者都屈服

'hello'
'world'
'MSCFX'
'package.propertiescu3u'
'bin\exet[p"R4~fd'
'Would'
'like'
'MSCFX'
'package'
'propertiescu3u'
'bin'
'centra'
'exet[p"R4~fd'

答案 2 :(得分:1)

为什么不将字符串拆分为空格,反斜杠和句点,就像在您的示例中一样?

// C#
string str = "MSCFX package.propertiescu3u bin\\exet[p\"R`4~fd"; // note the necessary escapes for \ and " 
var words = Regex.Split(str,@"[ \.\\]"); // split on spaces, periods, and backslashes

答案 3 :(得分:1)

您需要准确了解\b的作用。请记住,正则表达式无法读取; “单词边界”中的“单词”被任意定义为一个或多个字母,数字或下划线。如果您的定义不同,\b就没用了。

那么究竟在想什么呢?看看你更新的问题,我仍然没有看到可用的模式。你只想分裂空白和句号吗?

pattern = @"(?<=^|[\s.])[^\s.]+(?=[\s.]|$)";

应用于您的测试字符串:

MSCFX package.propertiescu3u bin\exet[p"R`4~fd

......匹配:

MSCFX
package
propertiescu3u
bin\exet[p"R`4~fd

答案 4 :(得分:1)

根据RegexHero

([^\\b]*)

使用ignorecase,singleline工作MSCFX package.propertiescu3u bin\exet[p"R``4~fd

enter image description here