3

我真的很想学习正则表达式,所以就到这里了。

我真的很想得到一个字符串中没有“/”的所有单词。例如,我需要这样做:“Hello Great /World/” 我需要得到结果:“Hello”“Great”

这在正则表达式中是否可行,如果可以,我该怎么做?我想我希望将结果存储在字符串数组中:)

谢谢

4

6 回答 6

4

Just use this regular expression \b(?<!/)\w+(?!/)\b:

var str = "Hello Great /World/ /I/ am great too";
var words = Regex.Matches(str, @"\b(?<!/)\w+(?!/)\b")
    .Cast<Match>()
    .Select(m=>m.Value)
    .ToArray();

This will get you:

Hello
Great
am
great
too
于 2012-04-09T20:36:38.190 回答
2
 var newstr = Regex.Replace("Hello Great /World/", @"/(\w+?)/", "");

如果你真的想要一个字符串数组

var words = Regex.Matches(newstr, @"\w+")
    .Cast<Match>()
    .Select(m => m.Value)
    .ToArray();
于 2012-04-09T20:11:12.047 回答
1

我首先将字符串拆分为数组,然后过滤掉匹配的单词。此解决方案也可能比大的正则表达式更干净,因为您可以更好地发现“单词”和过滤器的要求。

大的正则表达式解决方案类似于单词边界 - 不是斜杠 - 许多无空格 - 不是斜杠 - 单词边界。

于 2012-04-09T20:09:11.307 回答
0

我会使用正则表达式替换将所有 /[a-zA-Z]/ 替换为 '' (nothing) 然后获取所有单词

于 2012-04-09T20:07:47.403 回答
0

试试这个:(点击这里查看演示

(\s(?<!/)([A-Za-z]+)(?!/))|((?<!/)([A-Za-z]+)(?!/)\s)
于 2012-04-09T20:17:02.553 回答
0

使用此示例摘录:

/character/“_”(下划线/下划线)可以在/变量/名称/in/许多/programming//languages/中/使用/,而/character/“/”(斜线/笔划/solidus)通常是不允许的。

...此表达式匹配任何前后没有字符的字母、数字、下划线或撇号(英语中“单词”的典型概念/字符串-wrapped with a "/"

\b([\w']+)\b(?<=(?<!/)\1|\1(?!/))

...并且是最纯粹的形式,仅使用一个字符类来定义“单词”字符。它与示例匹配如下:

Matched               Not Matched
-------------         -------------
The                   character
_                     used
underscore            variable
under                 in
strike                programming
can                   languages
be                    character
in                    stroke
names
many
while
the
slash
solidus
is
typically
not
allowed

如果不需要排除/stroke/, ,则在末尾限制中添加一点将允许它,具体取决于您要如何定义“下一个”单词的开头:

\b([\w']+)\b(?<=(?<!/)\1|\1(?!/([^\w]))).

更改(?!/)为,如果它后面紧跟一个字母、数字或下划线(?!/([^\w])),则允许。这将从上面的“不匹配”列表移动到“匹配”列表。/something/ stroke

注意:\w匹配大写或小写字母、数字和下划线字符

如果您想从上面更改“单词”的概念,只需[\w']将表达式部分中包含的字符和速记字符类交换[a-zA-Z']为排除数字或[\w'-]包含连字符之类的东西,这将捕获under-strike为单个匹配项,而不是比两个单独的匹配:

\b([\w'-]+)\b(?<=(?<!/)\1|\1(?!/([^\w])))

重要的替代品!!! (我认为)

我只是想到了匹配任何用符号包裹的单词的替代方法/:只需消耗所有这些符号和它们包围的单词(拆分)。这有几个好处:没有环视意味着这可以在更多的上下文中使用(JavaScript 不支持环视,一些正则表达式根本不支持环视)同时提高效率;此外,使用拆分表达式意味着字符串数组的直接结果:

string input = "The /character/ "_" (underscore/under-strike) can be..."; //etc...
string[] resultsArray = Regex.Split(input, @"([^\w'-]+?(/[\w]+/)?)+");

瞧!

于 2012-04-10T17:43:32.203 回答