用于获取字符串一部分的正则表达式模式

本文关键字:正则表达式 模式 一部分 获取 字符串 用于 | 更新日期: 2023-09-27 18:34:54

嗨,我有这样的字符串:

** Dealing Flop ** [ As, 4s, 8h ]
** Dealing Turn ** [ 4h ]
** Dealing River ** [ 3s ]

我需要知道是翻牌转还是河,以及发了什么牌。现在我有

new Regex(@"^'*'* Dealing (?<flop>F)|(?<turn>T)|(?<river>R)");

我需要的应该是类似的东西

new Regex(@"^'*'* Dealing (?<flop>F)|(?<turn>T)|(?<river>R)*[(?<cards>)]$");

但它不起作用。请帮忙。谢谢。

用于获取字符串一部分的正则表达式模式

当然,

通过使用.Contains(),这将更具可读性?

enum Situation {
 Flop, 
 Turn,
 River
}
Situation GetSituation(string input){
 if(input.Contains("Flop"){ return Situation.Flop;}
 if(input.Contains("Turn"){ return Situation.Turn;}
 if(input.Contains("River"){ return Situation.River;}
 throw new ArgumentException("Invalid situation");
}

你可以像这样得到玩过的手:

var start = myString.IndexOf("[");
var end = myString.IndexOf("]");
var hands = myString.SubString(start, (end - start)).Split(",");

如果你想检查字符串中是否有处理浮点/河流或转弯,你可以使用这个正则表达式

(.*Dealing Flop| Dealing Turn| Dealing River.*)

然后,您可以从字符串中提取所需的所有数据。但真诚地,我更喜欢@JeroenVannevel方法,因为它更清晰,更容易理解

您可以使用此模式来了解情况和卡片:

'b(?<ftr>Flop|Turn|River) '*'* '[ (?<c1>[^], ]+)(?>, (?<c2>[^], ]+))?(?>, (?<c3>[^] ]+))? ]