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

时间:2013-10-10 21:51:34

标签: c# regex poker

嗨我有类似的字符串:

** 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>)]$");

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

3 个答案:

答案 0 :(得分:0)

使用.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(",");

答案 1 :(得分:0)

如果你想检查字符串中是否有Dealing Flop / River或Turn你可以使用这个正则表达式

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

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

答案 2 :(得分:0)

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

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