C#使用与字母相邻的正则表达式-数字解析字符串

C#使用与字母相邻的正则表达式-数字解析字符串,c#,regex,C#,Regex,我在编写正确的正则表达式和解析C#中的字符串时遇到问题。 我得到的输入字符串是: {EnemyMove X:7 Y:8} 我需要在X后面加上数字,在Y后面加上数字,范围是0-10。 尝试了下面的代码,但正则表达式不正确,我得到的结果不正确 我需要运行两次,一次是为了得到X附近的数字,第二次是为了得到Y之后的数字 string str = "{EnemyMove X:9 Y:10}"; var regex_sp_chrs = new Regex("/X:.*?(\d+)/"); regex_sp_

我在编写正确的正则表达式和解析C#中的字符串时遇到问题。 我得到的输入字符串是:

{EnemyMove X:7 Y:8}

我需要在X后面加上数字,在Y后面加上数字,范围是0-10。 尝试了下面的代码,但正则表达式不正确,我得到的结果不正确

我需要运行两次,一次是为了得到X附近的数字,第二次是为了得到Y之后的数字

string str = "{EnemyMove X:9 Y:10}";
var regex_sp_chrs = new Regex("/X:.*?(\d+)/");
regex_sp_chrs.Matches(str );
预期产出- 9 十,


提前感谢。

如果要将数字限制在0-10范围内,请将
\d+
替换为
10 |\d

X:(?<X>10|\d)\s+Y:(?<Y>10|\d)
它将输出
9-10
9
m.Groups[“X”]值
10
m.Groups[“Y”]值


如果您知道
{EnemyMove
是静态的(始终在
X
之前以文本形式出现),请将其添加到正则表达式中以使其更安全(即
@“{EnemyMove\s+X:(?\d+)\s+Y:(?\d+)
).

您的字符串不是一个开始的字符串。您在这里的实际要求是什么?字符串最初是如何生成的?您是否需要担心
X
和数字之间的空格之类的问题。从严格的规则开始,您的正则表达式将自己编写
{EnemyMove X:9 Y:10}
不是字符串。您的示例代码甚至无法编译。@ErikE,很抱歉,我在这里编写时一定错过了它,现已修复。我的下一个评论是,正则表达式不是解析它的好方法。为什么不在``(空格)上拆分呢,获取生成的令牌并将其拆分为
,然后对于每个令牌,如果
[0]
为X或Y,则使用
[1]
合适吗?看起来就是这样。如果您有任何疑问,请随时发表评论。我测试了演示,得到了字符串“X:7”,我已经得到了这个结果,但我只需要数字。您是否使用了
m.Groups[“X”].Value
m.Groups[“Y”].Value
?请使用当前代码更新问题,以便我可以查看。请说明预期的输出是什么。同样,您是否使用了
匹配.Groups[“X”]。Value
(=9)和
匹配.Groups[“Y”]。Value
(=10)?
var str = "{EnemyMove X:9 Y:10}";
var regex_sp_chrs = new Regex(@"X:(?<X>10|\d)\s+Y:(?<Y>10|\d)");
var ms = regex_sp_chrs.Matches(str);
foreach (Match m in ms)
Console.WriteLine(string.Format("{0} - {1}", 
                   m.Groups["X"].Value,
                   m.Groups["Y"].Value));