按c#中的字符限制正则表达式
本文关键字:正则表达式 字符 | 更新日期: 2023-09-27 18:27:46
我得到以下模式('s'w+)
,我需要用空格匹配字符串中的每个单词。
例如
当我有这个字符串
many word in the textarea must be happy
我得到
many
word
in
the
textarea
must
be
happy
这是正确的,但当我有另一个字符时,例如
many word in the textarea , must be happy
我得到
many
word
in
the
textarea
must
be
happy
但是must be happy
应该被忽略,因为我希望它在字符串中有另一个字符时中断
编辑:
示例2
all cats { in } the world are nice
应返回
all
cats
因为{
是我的另一个分隔符
示例3
My 3 cats are ... funny
应返回
My
3
cats
are
因为3
是字母数字,而.
是我的分隔符
我能做什么?
要做到这一点,您需要使用与字符串开头或最后一个匹配之后的位置匹配的'G
锚点。所以你可以用这个模式:
@"(?<='G's*)'w+"
[^'w's'n].*$|('w+'s+)
试试这个。抓住捕获的或匹配的。请参阅演示。为多行模式设置标志m
。
请参阅演示。
http://regex101.com/r/kP4pZ2/12
我认为Sam I Am的注释是正确的:您需要两个正则表达式。
- 捕获不超过一个非单词字符的文本
- 用一侧的空格捕获所有单词
这是相应的代码:
"^(''w+''s+)+"
"(''w+''s+)"
你可以很容易地将这两者结合起来,只捕获单个单词——就像一样
"^(''w+''s+)+"
下面是一段完整的代码来演示模式:
string input = "many word in the textarea , must be happy";
string pattern = "^(''w+''s+)+";
Match match = Regex.Match(input , pattern);
// Never returns a NullReferenceException because of GroupsCollection array indexer - check it out!
foreach(Capture capture in match.Groups[1].Captures)
{
Console.WriteLine(capture.Value);
}
编辑
查看Casimir et Hippolyte,获得一个非常干净的答案。
All-in-one regex:-)结果在list
中
Regex regex = new Regex(@"^(('w+)'s*)+([^'w's]|$).*");
Match m = regex.Match(inputString);
if(m.Success)
{
List<string> list =
m.Groups[2].Captures.Cast<Capture>().
Select(c=>c.Value).ToList();
}