我正在寻找最佳解决方案,性能明智,通过删除不完整单词的单词来重建字符串.在这个例子中,一个可接受的单词是一个没有数字的整个单词,或者不是以正斜杠或反斜杠开头.所以只是字母,但可以包括连字符和撇号
例如:
String str ="\DR1234 this is a word, 123456, frank's place DA123 SW1 :50:/"
使用上面我需要一个返回以下内容的新字符串:
Str = "this is a word, frank's place"
我已经做了一些研究Regex,但我找不到任何可以做我需要的东西.
最终代码段
var resultSet = Regex.Matches(item.ToLower(), @"(?:^|\s)(?![\\\/])(?!-+(?:\s|$))(?!'+(?:\s|$))(?!(?:[a-z'-]*?-){3,})(?!(?:[a-z'-]*?'){2,})[a-z'-]+[,.]?(?=\s|$)")
.Cast<Match>()
.Select(m => m.Value).ToArray();
Run Code Online (Sandbox Code Playgroud)
感谢所有投入的人 - 证明这是一个很棒的网站
根据您的意见: A word in this instance is:
a whole word without numbers
doesn't start with a forward slash, or a back slash
just letters only
can include hyphen and apostrophes
Run Code Online (Sandbox Code Playgroud)
根据您的定义覆盖所有单词字符的字符类将是,[a-z'-]+并且该组可以被空格或字符串的开头/结尾包围.你的示例也显示了一个逗号,所以我假设一个单词后面跟一个逗号或点,其中任何一个后面跟着空格也可以.
这个正则表达式将:
[a-z'-]+(?:^|\s)(?![\\\/])(?!-+(?:\s|$))(?!'+(?:\s|$))(?!(?:[a-z'-]*?-){3,})(?!(?:[a-z'-]*?'){2,})[a-z'-]+[,.]?(?=\s|$)

(?:^|\s)匹配字符串的开头或空格.这消除了测试字边界的需要,这对于诸如"abdc-egfh"之类的字符串是有问题的(?![\\\/]) 防止单词以\或/开头,但是由于字符类不允许这样做,所以这会被过度杀死(?!-+(?:\s|$)) 防止所有连字符的字符串(?!'+(?:\s|$)) 防止所有撇号的字符串(?!(?:[a-z'-]*?-){3,}) 防止有3个或更多连字符的字符串(?!(?:[a-z'-]*?'){2,}) 防止有2个或更多撇号的字符串[a-z'-]+[,.]?(?=\s|$) 匹配单词后跟一些可选的标点符号,并确保后面跟一个空格或一个字符串的结尾我不是一个C#程序员,但是来自代码块的返回数组匹配问题就像使用正则表达式返回数组/列表一样,这个正则表达式可能对你有用.请注意,此表达式假定您将使用不区分大小写的选项.
示范文本
\DR1234 - this is a word, 123456, frank's place DA123 SW1 :50:/ one-hyphen two-hyphens-here I-have-three-hyphens
Run Code Online (Sandbox Code Playgroud)
火柴
[0] => this
[1] => is
[2] => a
[3] => word,
[4] => frank's
[5] => place
[6] => one-hyphen
[7] => two-hyphens-here
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
290 次 |
| 最近记录: |