.net 正则表达式来解析非A的任何内容\b

.net 正则表达式来解析非A的任何内容\b,.net,regex,.net,Regex,有一些文本文件,我需要打破个人的话。但这个词的定义非常宽泛 \b似乎可以正确识别边界,但由于它是零宽度^\b没有任何作用 我知道.NET string.parse可能更快,但我也需要匹配位置 我的结局如下所示。当“^”为非零时,我想打开它。添加了想要忽略中断的日期、电子邮件和URL 我知道解决方案与我最初的问题陈述不太接近。它进化了。谢谢大家的帮助 String line; pattern = @"\w+@\w+|[01]?\d\/[0123]?\d\/([12]\d)?\d\d|htt

有一些文本文件,我需要打破个人的话。但这个词的定义非常宽泛

\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;
    }

\w
匹配字母、数字和
\u
(下划线)<代码>\b匹配
\w
字符和
\w
(非单词字符,
[^\w]
)之间的边界<代码>\B一个边界(它总是零宽度),因此
\B+
是无意义的

编辑:我仍然无法准确理解您要将单词分解到哪里

如果要匹配除
(句点)和空白之外的任何内容,请尝试此排除方法:

[^.\s]+
[-\w`~!@#$%^&*\[\]()\\\/]+
如果要包含特定字符,请尝试此包含方法:

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

\w
匹配字母、数字和
\u
(下划线)<代码>\b匹配
\w
字符和
\w
(非单词字符,
[^\w]
)之间的边界<代码>\B一个边界(它总是零宽度),因此
\B+
是无意义的

编辑:我仍然无法准确理解您要将单词分解到哪里

如果要匹配除
(句点)和空白之外的任何内容,请尝试此排除方法:

[^.\s]+
[-\w`~!@#$%^&*\[\]()\\\/]+
如果要包含特定字符,请尝试此包含方法:

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

没有一个单词boundry
\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'

没有一个单词boundry
\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'

为什么不像您的示例中那样,在空格、反斜杠和句点上拆分字符串呢

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

为什么不像您的示例中那样,在空格、反斜杠和句点上拆分字符串呢

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

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

那么,你认为一个词到底是什么?看看你更新的问题,我仍然没有看到一个可用的模式。你只想在空格和句点上分开吗

pattern = @"(?<=^|[\s.])[^\s.]+(?=[\s.]|$)";
…它匹配:

MSCFX
包裹
属性CU3U
bin\exet[p“R`4~fd

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

<> P>那么你认为一个词到底是什么?看看你更新的问题,我仍然看不到可用的模式。你只想在空白和句点上分裂吗?< /P>
pattern = @"(?<=^|[\s.])[^\s.]+(?=[\s.]|$)";
…它匹配:

MSCFX
包裹
属性CU3U
bin\exet[p“R`4~fd
根据

Works
MSCFX package.propertiescu3u bin\exet[p“R``4~fd
使用ignorecase,单线

根据

Works
MSCFX package.propertiescu3u bin\exet[p“R``4~fd
使用ignorecase,单线


请添加一个示例字符串和所需的匹配项。@ChrisS减为75空。行中的字符数。pattern=@“\b([^\\b]+)\b”在单词边界处对3个单词进行了奇怪的解析,但有些单词包含工作边界。您的示例说您需要
MSCFX包属性CU3U bin exet[p“R
4~fd`来自废纸篓字符串,但这不是整个废纸篓字符串吗?
\b
与字符不匹配-它是零宽度,就像
(?@ChrisS在示例中,空格表示“单词”之间的分隔符”找到。但找不到垃圾词。请添加一个示例字符串和所需的匹配项。@ChrisS,减为75个空。行中的字符数。pattern=@“\b([^\\b]+)\b”;在单词边界处对3个单词进行了奇怪的解析,但有些单词包含工作边界。您的示例说您希望从垃圾字符串中获取
MSCFX包属性cu3u bin exet[p“R
4~fd`,但这不就是整个垃圾字符串吗?
\b
与字符不匹配-它是零宽度,就像
(?@ChrisS在示例中,空格表示“单词”之间的间隔"找到了。但它没有找到垃圾词。谢谢,但\S+不是一个足够自由的解析器。\b将在上解析。\@Blam,我还不确定我是否理解,但你几乎有两个选项,包括和排除…请参阅我的编辑。我听到了。我非常希望^\b可以是一个包含。在我的暴力代码中,它有一个中断字符列表。我的逻辑是s很简单。Char是break还是not。如果它不是break Char,它将成为当前单词的一部分。谢谢,但\s+不是一个足够自由的解析器。\b将继续解析。\@Blam,我还不确定我是否理解,但你几乎有两个选项,包括和排除……请参阅我的编辑。我听到了。我非常希望^b可以是一个包含。在我的野蛮中强制代码它有一个中断字符列表。逻辑很简单。字符要么是中断字符,要么不是中断字符。如果它不是中断字符,它将成为t的一部分