我正在尝试从字符串中获取特定部分。我必须得到以“@”开头且仅包含拉丁字母表中的字母的部分。

我想我必须创建一个正则表达式模式,但我不知道如何。

string test = "PQ@Alderaa1:30000!A!->20000";
var planet = "Alderaa"; //what I want to get
string test2 = "@Cantonica:3000!D!->4000NM";
var planet2 = "Cantonica";

还有一些其他部分我必须得到,但我会尽量自己得到。 (在 ':' 之后开始并且是一个整数;可以是“A”(攻击)或“D”(破坏)并且必须用“!”(感叹号)包围;在“->”之后开始并且应该是一个整数)

最佳答案

您可以使用捕获组获取单独的部分:

@([a-zA-Z]+)[^:]*:(\d+)!([AD])!->(\d+)

这将匹配:
  • @([a-zA-Z]+) 匹配 @ 并在第 1 组中捕获 1+ 次 a-zA-Z
  • [^:]*: 使用否定的 character class 匹配 0+ 次不是 : ,然后匹配 : (如果后面可能只是可选数字,您也可能匹配 0+ 次数字 [0-9]* )
  • (\d+) 捕获第 2 组 1+ 位数
  • !([AD])! 匹配 !,在第 3 组和 A 或 D 中捕获,然后匹配 !
  • ->(\d+) 匹配 -> 并在第 4 组中捕获 1+ 位

  • Demo | C# Demo

    关于c# - 从字符串中获取特定部分,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55502027/

    10-17 01:00