Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正则表达式删除n个字符后的字符_C#_Regex - Fatal编程技术网

C# 正则表达式删除n个字符后的字符

C# 正则表达式删除n个字符后的字符,c#,regex,C#,Regex,两年没有编码后,我有点缺乏锻炼。 我在一个txt文件中有数千行。与此类似: X0 Y0 S-0.30 X0 Y0 S-0.21 X0 Y0 S-0.08 我需要从所有行中删除S-x.xx值。因此,每行只保存X Y和相关值 我尝试使用正则表达式 if (Line.Contains("S")) { Regex rgx = new Regex(@"S\d+(\.\d+)?"); Line = rgx.Replace(Line, "");

两年没有编码后,我有点缺乏锻炼。 我在一个txt文件中有数千行。与此类似:

X0 Y0 S-0.30
X0 Y0 S-0.21
X0 Y0 S-0.08
我需要从所有行中删除S-x.xx值。因此,每行只保存X Y和相关值

我尝试使用正则表达式

if (Line.Contains("S"))
        {
           Regex rgx = new Regex(@"S\d+(\.\d+)?");
            Line = rgx.Replace(Line, "");
        }
        return Line;
但我没有得到我所期望的结果。任何暗示都将不胜感激


谢谢

您可以使用以下正则表达式:

并使用
$1

X
逐字匹配字符
X
(区分大小写)

\d+
匹配一个数字(等于
[0-9]
)一次或多次

Y
逐字匹配字符
Y
(区分大小写)


\d+
匹配一个数字(等于
[0-9]
)一次或多次

您可以使用以下正则表达式:

并使用
$1

X
逐字匹配字符
X
(区分大小写)

\d+
匹配一个数字(等于
[0-9]
)一次或多次

Y
逐字匹配字符
Y
(区分大小写)

\d+
匹配一个数字(等于
[0-9]
)一次或多次

您可以使用

var result = Regex.Replace(s, @"\s+S-\d+(?:\.\d+)?", string.Empty);

  • \s+
    -1+空格
  • S-
    -
    S-
    子字符串
  • \d+(?:\。\d+)
    -数字模式:
    • \d+
      -1+位
    • (?:\。\d+)
      -可选序列:
    • \。
      -dot
    • \d+
      -1+位
您可以使用

var result = Regex.Replace(s, @"\s+S-\d+(?:\.\d+)?", string.Empty);

  • \s+
    -1+空格
  • S-
    -
    S-
    子字符串
  • \d+(?:\。\d+)
    -数字模式:
    • \d+
      -1+位
    • (?:\。\d+)
      -可选序列:
    • \。
      -dot
    • \d+
      -1+位

    • 请理解,您真的只想删除以
      S
      开头的最后第三个术语。只需尝试用空字符串替换模式
      \sS.*$

      Regex rgx = new Regex(@"\sS.*$");
      string Line = "X0 Y0 S-0.30";
      Line = rgx.Replace(Line, "");
      Console.WriteLine(Line);
      
      X0 Y0
      

      请理解,您只想删除最后的第三个术语,它以
      S
      开头。只需尝试用空字符串替换模式
      \sS.*$

      Regex rgx = new Regex(@"\sS.*$");
      string Line = "X0 Y0 S-0.30";
      Line = rgx.Replace(Line, "");
      Console.WriteLine(Line);
      
      X0 Y0
      

      S
      \d+
      之间缺少一个
      -
      。根据您的样品,
      S.*
      也足够了。谢谢。这就解决了我的问题。在
      s
      \d+
      之间缺少一个
      -
      。根据您的样品,
      S.*
      也足够了。谢谢。这就解决了我的问题。