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