我需要将以下字符串拆分为上述模式
String str = "([myString1 - L]*[myString2 - L])/([myString3 - D]+[myString4 - N])";
我希望输出如下所示:
1. (
2. [myString1 - L]
3. *
4. [myString2 - L]
5. )
6. /
7. (
8. [myString3 - D]
9. +
10. [myString4 - N]
11. )
答案 0 :(得分:2)
我同意neoistheone这看起来像是解析器的工作,但是你可以使用正则表达式
var str = "([myString1 - L]*[myString2 - L])/([myString3 - D]+[myString4 - N])";
var result = Regex.Split(str, @"(\[[^]]+\]|[/\*\+\(\)])").Where(r => r != "").ToList();
将为您提供所需的输出(只要输入保持简单,例如输入中没有嵌套表达式)。
答案 1 :(得分:1)
根据您指定的内容进行匹配,您可以尝试
new Regex(@"(?<=[(*/+)])(?=.)|(?<=.)(?=[(*/+)])").Split(str);
这将匹配
*
,/
,(
,)
或+
,下一个字符存在*
,/
,(
,)
或+
且前面的字符存在您需要存在前一个/下一个字符,否则它将在字符串的开头/结尾处分开。
答案 2 :(得分:1)
这让我觉得你正试图解析一个等式......(也许随后用Shunting-yar algorithm :)所以,实际上,你想把这个等式分为3类:
要使用正则表达式,我会谷歌...有很多资源,但我使用的备忘单是:http://www.mikesdotnetting.com/Article/46/CSharp-Regular-Expressions-Cheat-Sheet
它拥有您想要的大部分操作。
我上面描述的每个类别应该是它自己的组。然后,您需要or
他们在一起。
这给了我们:
(<?operator>[\+\-\*\/])|(<?operand>\w\s\-\[LD])|(<?par>[\(\)])
这将为每个部分返回一个匹配。所以你只想继续骑自行车,直到你没有更多的比赛。