查找具有另一个字符串列表中项目的子字符串的所有字符串

时间:2013-09-24 19:45:09

标签: f# f#-3.0

我有以下代码。

let s1 = [(12, "abcde12345"); (23, "bcdef2345"); (12, "xyzafg3838")]
let s2 = ["bcd"; "345"]

s1中找到第二项包含s2中任何一项的子字符串的所有项目的最佳方法是什么?

  

(12,“abcde12345”); (23,“bcdef2345”)

在我的真实代码中,s1是Seq

3 个答案:

答案 0 :(得分:3)

Seq.filter (fun (_, x) -> List.exists (x.Contains) s2) s1

答案 1 :(得分:2)

我想出了一个。

s1 |> Seq.filter (fun i -> List.exists (fun e -> (snd i).Contains(e)) s2)

答案 2 :(得分:0)

将第二组中的所有项目转换为正则表达式,然后将其应用于第一组中的每个项目。

open System
open System.Text.RegularExpressions

let setA  = [ "One"; "Two"; "Three" ]
let setB = [ "o"; "n" ];

let pattern = String.Join("|", setB);
let regex = new Regex(pattern);

let results = setA |> List.filter (fun str -> regex.Match(str).Success)

results |> List.iter (fun result -> Console.WriteLine(result))