Converting rough strings to exact strings
Show older comments
I have a string array of filenames which are names in an semi-consistent manner, e.g.:
AllFiles
AllFiles =
4x1 string array
"textIdontCareAbout_Phenolic32_Group5_textIdontCareAbout"
"textIdontCareAbout_P1_textIdontCareAbout"
"textIdontCareAbout_Epx2_G3_textIdontCareAbout"
"textIdontCareAbout_Epoxy_105_textIdontCareAbout"
Im trying to figure out how to extract & convert the inconsistent substrings of interest (the stuff between "textIdontCareAbout") into a consistent format, e.g.:
AllFiles
AllFiles =
4x1 string array
"P32G5"
"P1"
"E2G3"
"E105"
I had been avoiding using regexp, but having caved and decided to work with that, I'm trying to figure out an elegant way to do this conversion. At present the only thing I can see working is manually checking for each possible phrasing style I see when manualy searching through the data I have at present.
Is there a better way to go about this, or even just some suggestions to how to define the regexp in a way to have as few searches as possible?
4 Comments
the cyclist
on 7 Sep 2022
Using regular expressions is the only way I can think to attack this. And, at the risk of stating the obvious ... you can't write the regular expression code until you can precisely define the rule for the expression you are trying to identify. So, that's the first step.
It seems that the rule might be ...
- only the substring between the outermost underscores
- all the digits
- only the capitalized letters
I don't want to bother figuring out a regular expression that does that, though, if that does not seem like the fully general rule you need.
Gabriel Stanley
on 7 Sep 2022
There may be a way to do this with string operations. Hard to tell w/o knowing the rule(s) to apply for what to keep and what to discard from a single string. For example, supposing that @the cyclist has the correct rules, one could do
AllFiles = [
"textIdontCareAbout_Phenolic32_Group5_textIdontCareAbout"
"textIdontCareAbout_P1_textIdontCareAbout"
"textIdontCareAbout_Epx2_G3_textIdontCareAbout"
"textIdontCareAbout_Epoxy_105_textIdontCareAbout"]
AllFiles = extractAfter(AllFiles,"_")
AllFiles = reverse(extractAfter(reverse(AllFiles),"_"))
upperchars = isstrprop(AllFiles,'upper')
digitchars = isstrprop(AllFiles,'digit')
AllFiles = arrayfun(@(a,b,c)(string(a{1}(find(b{:} | c{:})))),cellstr(AllFiles),upperchars,digitchars)
IDK, maybe regexp will be better/easier (I've never been able to get my head wrapped around regular expressions and patterns).
Gabriel Stanley
on 8 Sep 2022
Accepted Answer
More Answers (0)
Categories
Find more on Characters and Strings in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!