# Pattern matching and removing from the name

colnames(countdata) = gsub("Aligned.sortedByCoord.out.bam_rem.bam", "", colnames(countdata))
colnames(countdata)
dput(colnames(countdata))
c("BAF60A_KD_1_S13", "BAF60A_KD_2_S14", "BAF60A_RA_1_S17", "BAF60A_RA_2_S18",
"BAF60A_VD3_1_S15", "BAF60A_VD3_2_S16", "BAF60C_KD_1_UI_S1",
"BAF60C_KD_2_UI_S2", "BAF60C_KD_RA_1_S11", "BAF60C_KD_RA_2_S12",
"BAF60C_KD_VD3_1_S9", "BAF60C_KD_VD3_2_S10", "VC_1_UI_S3", "VC_2_UI_S4",
"VC_RA1_S5", "VC_RA_2_S6", "VC_VD3_1_S7", "VC_VD3_2_S8")


After removing the above pattern I want to remove this part from each of the colnames _S[anynumber] so that I can end up like this as an example BAF60A_KD_1 but not sure how to make that pattern and match the same and remove or replace it with empty space. I tried as below which ends up like all the digits are removed.

colnames(countdata) = gsub("[[:digit:]_S]", "", colnames(countdata))

colnames(countdata)

c("BAFAKD", "BAFAKD", "BAFARA", "BAFARA", "BAFAVD", "BAFAVD",
"BAFCKDUI", "BAFCKDUI", "BAFCKDRA", "BAFCKDRA", "BAFCKDVD", "BAFCKDVD",
"VCUI", "VCUI", "VCRA", "VCRA", "VCVD", "VCVD")


• I'm voting to close this question as off-topic because the question is purely about regex, not requiring any biological knowledge. You can remove them with names <- gsub("_S.*", "", colnames(countdata)) followed by removing any number or underscore gsub("[:digit:]|_", "", names)
– llrs
Apr 3 '19 at 12:51
• IIRC gsub has a perl=TRUE option for working with advanced regexes. Unfortunately, the [[:digit:]] style regexes are not supported by the base regex engines in most utilities/distros. Apr 3 '19 at 14:22
• @RamRS what do you mean? [:digit:] is a POSIX character class and should work on the vast majority of regex flavors. This isn't a feature of advanced regexes, but a feature of the most basic of them all: POSIX basic regular expressions. Where have you seen it not work? For example, it works in BRE (printf "foo\n123\n" | grep -P '[[:digit:]]'), ERE (printf "foo\n123\n" | grep -E '[[:digit:]]'), PCRE (printf "foo\n123\n" | grep -P '[[:digit:]]'). Apr 3 '19 at 16:08
• @llrs I don't think this is off topic. Bioinformatics involves a lot of basic programming knowledge, and I would say that includes regular expressions. You can do a lot of very productive work in bioinformatics without really knowing the first thing about biology. I would say this comes under the same category as general text parsing questions which we've already decided should be on topic. Apr 3 '19 at 16:10
• @RamRS That should be s/[[:digit:]]//, which works on GNU sed without the -r. The [:digit:] is the special symbol, you need to put it in a character class ([ ], hence [[:digit:]]) for it to work as a character class. s/[:digit:]// shouldn't (and doesn't, on my GNU sed running on Linux) work even with the -r (which just enables ERE). Even busybox sed (which is as basic as it gets) understands [[:digit:]] without -r. Apr 3 '19 at 17:59

Without regex, split on "_", drop last item, then paste it back again:

sapply(strsplit(x, "_"), function(i) paste(head(i, -1), collapse = "_"))


Or with regex (stealing the code from tools::file_path_sans_ext function which is used to drop file extensions):

sub("([^_]+)\\_[[:alnum:]]+\$", "\\1", x)

# [1] "BAF60A_KD_1"     "BAF60A_KD_2"     "BAF60A_RA_1"     "BAF60A_RA_2"     "BAF60A_VD3_1"    "BAF60A_VD3_2"
# [7] "BAF60C_KD_1_UI"  "BAF60C_KD_2_UI"  "BAF60C_KD_RA_1"  "BAF60C_KD_RA_2"  "BAF60C_KD_VD3_1" "BAF60C_KD_VD3_2"
# [13] "VC_1_UI"         "VC_2_UI"         "VC_RA1"          "VC_RA_2"         "VC_VD3_1"        "VC_VD3_2"

• multiple ways of doing wow
– kcm
Apr 4 '19 at 12:27
• @krushnachChandra minor note, you will get a quicker and better answers if you post regex/R posts at StackOverflow. Apr 4 '19 at 12:32
• well actually i got banned from posting it on the R forum ,i guess i asked stupid questions.it says from this account no more questions.But im glad for multiple answers coming out
– kcm
Apr 4 '19 at 12:36
• What do you mean "banned"? This is your profile, right? stackoverflow.com/users/6342356/krushnach-chandra Apr 4 '19 at 12:38
• yes i do ask question on this forum and other forum but not in the R section may be bad questions
– kcm
Apr 4 '19 at 12:54