使用C#查找字符串中的特定模式

Ses*_*ame 5 c# regex string

我试图用C#查找并删除字符串中的特定模式.

模式是星号,后跟任意数量的数字,后跟.txt

示例字符串:

  1. 测试*123.txt
  2. 测试2*1.TXT
  3. 测试*1234.txt3
  4. TEST4*12.txt123

鉴于这些例子,期望的结果将是:

  1. test("*123.txt"已删除)
  2. test2("*1.txt"已删除)
  3. test3("*1234.txt"已删除)
  4. test4123("*12.txt"已删除)

如何实现这一目标?

mel*_*okb 8

string pattern = @"\*\d*\.txt";
Regex rgx = new Regex(pattern)
input = rgx.Replace(input, "");
Run Code Online (Sandbox Code Playgroud)


R. *_*des 8

如果构建正则表达式并将其匹配替换为空字符串,则可以有效地删除该模式.这是您的模式所需要的:

  1. 星号在正则表达式中具有特殊含义(前一项的零个或多个),因此您必须使用反斜杠(\*)将其转义.

  2. 您可以将数字与数字字符类(\d)或包含所有数字()的显式类匹配[0-9].由于文化背景,它们之间存在差异:\d可以匹配像东部阿拉伯数字(0.1.2.3.4.5.6.7.8.9)这样的东西,而[0-9]只匹配印度 - 阿拉伯数字(0 ,1,2,3,4,5,6,7,8,9).

  3. 您可以使用+量词来匹配前一项\d+中的一项或多项:将匹配一个或多个数字.

  4. 点是另一个特殊字符(它匹配除换行符之外的任何单个字符).它还需要转义(\.).

  5. 您可以将没有特殊字符的文本与文本本身txt匹配:完全匹配txt.

把所有东西放在一起我们得到:

string purged = Regex.Replace(input, @"\*[0-9]+\.txt", "");
Run Code Online (Sandbox Code Playgroud)