如何删除所有与模式不匹配的符号

时间:2019-07-12 17:00:52

标签: c# regex

我正在写一种存储楼号的类型。如果用户尝试输入错误的字符串,则应使字符串适合指定的模式。我的模式是:[\d]+[a-zA-Z]?,因此字符串应类似于103a59。如果我有类似assdas103a4asdas1231as1之类的信息,则应删除103a以外的所有内容。

2 个答案:

答案 0 :(得分:1)

我们可以通过找到第一个匹配项并将其存储在捕获组中,然后用捕获的文本替换其文本来实现。

^.*?(\d+[a-zA-Z]?).*

  • ^.*?从行的开头开始匹配尽可能少的字符,这意味着它将在我们的第一个匹配项处停止:

  • (\d+[a-zA-Z]?)是您现有的正则表达式,位于捕获组中。

  • .*一直持续到行尾。

将其替换为第1组\1的内容,我们将捕获的assdas 103a 4asdas1231as1变成103a

请注意,锚点(^不是必需的,但它们会提高非匹配行的性能,因为引擎不会在每个起始位置再次尝试匹配。

如果愿意,您也可以只抓住第一个匹配项并使用其值,而不必费心用正则表达式替换。在这种情况下,您将不需要周围的.*表达式。

答案 1 :(得分:1)

  

应删除除103a以外的所有内容。

然后只能通过调用Match来进行第一场比赛,例如:

var str = "assdas103a4asdas1231as1";

var buildingNumber = Regex.Match(str, @"[\d]+[a-zA-Z]?").Value;

放入buildingNumber的结果是:

103a