正则表达式 - 获取所有未包含“/”的单词

时间:2012-04-09 20:02:34

标签: c# regex string

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

我真的希望将字符串中的所有单词都放在两边都没有“/”。 例如,我需要这样做: “Hello Great / World /” 我需要得到结果: “你好” “大”

这是正则表达式中的可能,如果是这样,我该怎么办?我想我希望结果存储在字符串数组中:)

谢谢

6 个答案:

答案 0 :(得分:4)

只需使用此正则表达式\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();

这会让你:

Hello
Great
am
great
too

答案 1 :(得分:2)

 var newstr = Regex.Replace("Hello Great /World/", @"/(\w+?)/", "");

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

var words = Regex.Matches(newstr, @"\w+")
    .Cast<Match>()
    .Select(m => m.Value)
    .ToArray();

答案 2 :(得分:1)

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

大的正则表达式解决方案就像字边界 - 不是斜线 - 许多没有空格 - 而不是斜线 - 字边界。

答案 3 :(得分:0)

我会使用正则表达式替换将所有/ [a-zA-Z] /替换为&#39;&#39; (没什么)然后得到所有的话

答案 4 :(得分:0)

试试这个:Click here for a demo

(\s(?<!/)([A-Za-z]+)(?!/))|((?<!/)([A-Za-z]+)(?!/)\s)

答案 5 :(得分:0)

使用此示例摘录:

  

/ character /“_”(下划线/欠击)可以是/ used / in / variable / names / in / many / 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])),如果<{1}} 后面有字母,数字或下划线,则允许/something/ 。这会将stroke从“未匹配”移动到上面的“匹配”列表。

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

如果您想从上面改变“单词”的概念,只需将表达式[\w']部分中包含的字符和速记字符类交换为类似[a-zA-Z']的内容,以排除数字或[\w'-]包含连字符,它将under-strike作为单个匹配进行捕获,而不是两个单独的匹配:

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

重要的替代方案!!! (我认为)

我只想到匹配的替代/符号包裹的任何单词:只需消费全部这些符号和 包围在其中的单词(分裂)。这有一些好处:没有环绕意味着这可以在更多的上下文中使用(JavaScript不支持lookbehind和一些正则表达式根本不支持环视)同时提高效率;另外,使用split表达式意味着String数组的直接结果:

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

瞧!