C# 短代码正则表达式

C# 短代码正则表达式,c#,.net,regex,C#,.net,Regex,我已经编写了一个正则表达式来匹配短代码,格式类似于: [playername Le'Veon Bell] 以下是正则表达式: \[playername\s+(?<name>[\w \-\'\’]+)\s*\] \[playername\s+(?[\w\-\'\'\']+)\s*\] 我知道regex正在为玩家名字中的一句话而挣扎。我已经测试了正则表达式,它似乎可以工作,但在我从web应用程序运行代码时没有找到匹配项。根据您提供的信息,我相信\[playername\s+(?[^

我已经编写了一个正则表达式来匹配短代码,格式类似于:

[playername Le'Veon Bell]
以下是正则表达式:

\[playername\s+(?<name>[\w \-\'\’]+)\s*\]
\[playername\s+(?[\w\-\'\'\']+)\s*\]

我知道regex正在为玩家名字中的一句话而挣扎。我已经测试了正则表达式,它似乎可以工作,但在我从web应用程序运行代码时没有找到匹配项。

根据您提供的信息,我相信
\[playername\s+(?[^]]+?)\s*\]
应该可以工作


唯一真正的区别在于捕获组
[^]+
,它匹配任何非
]
字符。这将有效地捕获
[playername
之后的任何内容,直到第一个
]
。如果你有嵌套的方括号,它就会断开。

如果你不知道更多关于你的场景的信息,这有点难以确定,但是从你所得到的,我想说你应该切换到更像这样的场景

\[playername\s+(?<name>[^\]\s]*)\s+\]
\[playername\s+(?[^\]\s]*)\s+\]
这将匹配任何没有方括号或空格的东西,所以它看起来像是你真正想要做的。我个人很想删除空白条件,仅仅是因为名字中可能有空格。你可以随时调用任何你的语言版本的C#的
string.Trim()
都是事后的


当然,请注意,这与您所做的并不完全相同:您明确地限制了字符。但看起来您试图限制任何文本。

您可以使用以下正则表达式:

\[playername\s+(?<name>.*?)\s*\]
\[playername\s+(?*?)\s*\]

对于本例,不需要转义字符类中存在的
-
'
符号

Regex rgx = new Regex(@"\[playername\s+(?<name>[\w '’-]+?)\s*\]");
Regex rgx=new Regex(@“\[playername\s+(?[\w'-]+?)\s*\]”);

您能给我们一个更完整的例子吗?包含完整字符串和多个匹配示例的内容?您的代码对我来说很好。也许您可以指出,在从大字符串分组时,锚定正则表达式(多行)或使用lazy for
*
。由于原始正则表达式允许在捕获组之外的
\]
之前使用空格,因此可能需要将其返回。我可能会使用锚定,以便名称不包含尾随空格
\[playername\s+(?[^]]+?)\s*\]
@Joshua你必须在你的正则表达式中添加
\s*
。@AvinashRaj:我为懒惰(非贪婪)匹配添加了
,但这是否必要还有些争议。最后一个
\s*
不会有多大作用,因为character类将捕获最后一个字符和右括号之间的任何空格。获取的值应该在检索后进行修剪。@AvinashRaj:啊,我明白了,当与lazy操作符结合使用时,它实际上运行得更好一些。谢谢,我会修改的!小心:字符类中的空格连字符撇号与空格匹配,
$
%
&
,而不是
-
。我想现在看起来还可以。