我真的想学习正则表达式,所以就这样了。
我真的希望将字符串中的所有单词都放在两边都没有“/”。 例如,我需要这样做: “Hello Great / World /” 我需要得到结果: “你好” “大”
这是正则表达式中的可能,如果是这样,我该怎么办?我想我希望结果存储在字符串数组中:)
谢谢
答案 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]+/)?)+");
瞧!