如何获得给定字符串中特定子字符串的计数?
来源:
"00101230314120600 n400000he9nnotprovided170002303141230738080759921100101230314120600n400000he9nnotprovided1700023031412307380807599211">
子字符串:00101230314120600 n400000he9n
let countMatches wordToMatch (input : string) =
Regex.Matches(input, Regex.Escape wordToMatch).Count
我不明白为什么你的代码不工作,这是代码作为一个xunit测试通过。
(我个人不喜欢用正则表达式来做这个,但它可以工作)
module Tests
open Xunit
open System.Text.RegularExpressions
[<Fact>]
let ``Count substrings`` () =
let input = "00101230314120600N400000HE9NNOTPROVIDED170002303141230738080759921100101230314120600N400000HE9NNOTPROVIDED1700023031412307380807599211"
let wordToMatch = "00101230314120600N400000HE9N"
let count = Regex.Matches(input, Regex.Escape wordToMatch).Count
Assert.Equal(2,count)
我个人认为我会使用分割
[<Fact>]
let ``Count substrings with split`` () =
let input = "00101230314120600N400000HE9NNOTPROVIDED170002303141230738080759921100101230314120600N400000HE9NNOTPROVIDED1700023031412307380807599211"
let wordToMatch = "00101230314120600N400000HE9N"
let count = (input.Split wordToMatch).Length - 1
Assert.Equal(2,count)
我认为这是可行的,你只需要检查一下边缘情况。
我现在不能编写代码本身,但是为了避免昂贵的正则表达式,您有以下选择:
获取intput
到li
的长度
获取source
到ls
的长度
获取source
中intput
的所有出现的长度,用空字符串替换为lr
出现的数量是(ls
-lr
)/li
即。删除时缺失了多少次