2
$\begingroup$

So, for example I have

StringReplace[
  {"abc", "abd", "abx", "abf", "abe", "abg", "abh", "abi", "acb", "acd"}, 
  {"bd" -> "", "bg" -> ""}]

which gives

{"abc", "a", "abx", "abf", "abe", "a", "abh", "abi", "acb", "acd"}, 

but I want the new list to be

{"abc", "abx", "abf", "abe", "abh", "abi", "acb", "acd"}.

A solution is alright if it works for the fact that I am starting with a list of sub-lists with the same length and deleting everything else. I tried using an if statement with by splitting into characters and using delete, but for some reason this didn't work.

$\endgroup$
2
  • $\begingroup$ does this give ehat you need: DeleteCases[{"abc", "abd", "abx", "abf", "abe", "abg", "abh", "abi", "acb", "acd"}, _?(StringMatchQ[#, "*bd" | "*bg"] &)]? $\endgroup$ Commented Jan 29, 2017 at 0:55
  • $\begingroup$ Select[{"abc", "abd", "abx", "abf", "abe", "abg", "abh", "abi", "acb", "acd"}, ! StringContainsQ[#, {"bd", "bg"}] &] $\endgroup$ Commented Jan 29, 2017 at 0:58

4 Answers 4

2
$\begingroup$
strngs = {"abc", "abd", "abx", "abf", "abe", "abg", "abh", "abi",  "acb", "acd"}; 

Pick[strngs, ! StringMatchQ[#, "*bd*" | "*bg*"] & /@   strngs]

{"abc", "abx", "abf", "abe", "abh", "abi", "acb", "acd"}

$\endgroup$
4
$\begingroup$
lst = {"abc", "abd", "abx", "abf", "abe", "abg", "abh", "abi", "acb", "acd"}
fn = Pick[#, StringFreeQ[#, #2]] &;


fn[lst, "bd" | "bg"]

{"abc", "abx", "abf", "abe", "abh", "abi", "acb", "acd"}

fn[lst, "bd" | "ac" | "bc"]

{"abx", "abf", "abe", "abg", "abh", "abi"}

Etc...

$\endgroup$
1
  • 1
    $\begingroup$ +1 Similar: Select[lst, StringFreeQ["bd" | "bg"]] or Cases[lst, _?(StringFreeQ["bd" | "bg"])] $\endgroup$ Commented Jan 29, 2017 at 1:41
1
$\begingroup$

Replacing works too:

Replace[_?(StringContainsQ["bd" | "bg"]) -> Sequence[]] /@
{"abc", "abd", "abx", "abf", "abe", "abg", "abh", "abi", "acb", "acd"}
$\endgroup$
1
$\begingroup$

You could use StringDelete

data = {"abc", "abd", "abx", "abf", "abe", "abg", "abh", "abi", "acb", "acd"};
StringDelete[data, {_ ~~ "bd", _ ~~ "bg"}] // DeleteCases[""]

{"abc", "abx", "abf", "abe", "abh", "abi", "acb", "acd"}

An alternative is

StringDelete[data, (_ ~~ "bd") | (_ ~~ "bg")] // DeleteCases[""]
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.