How can I use regexp to return a list of variable names?
15 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
I want to extract variable names from a string. For my purposes, variables start with a letter or an underscore, and they end before anything except for open parenthesis ("(").
So
'sin(var1) + var2'
should become something like
["var1" "var2"]
I tried this:
testStr = 'sin(var1) + var2';
vars = regexp(testStr,'([a-zA-Z_]\w*)(?:[^(\w]|$)','tokens')
and got this:
ans =
0x0 empty cell array
What am I doing wrong?
3 Kommentare
Stephen23
am 23 Feb. 2018
Bearbeitet: Stephen23
am 23 Feb. 2018
func meeets these three condidrions:
- "begins with either an English letter or an underscore" yes!
- "contains any number of English letters, underscores, and digits" yes!
- "ends before something that is not an English letter, underscore, or digit" yes!
So why is func not on your list of variables when it meets all of your conditions?
Note that the regular expression you defined on regex101 actually uses "ends before something that is not an English letter, underscore, digit, or open bracket".
Antworten (2)
Ji Huang
am 23 Feb. 2018
Bearbeitet: Ji Huang
am 23 Feb. 2018
I would do it in two steps. First, remove the functions. i.e. characters before open parenthesis
testStr = 'sin(var1) + var2';
var_step_1 = regexprep(testStr,'[\w_]{0,}\(', '\(')
It gives "(var1) + var2". Then, match vars.
var_step_2 = regexp(var_step_1,'[\w_]{0,}', 'match')
0 Kommentare
Stephen23
am 23 Feb. 2018
Bearbeitet: Stephen23
am 23 Feb. 2018
>> str = 'var1 * _var2 * 2var3 + func(var5))';
>> C = regexpi(str,'([A-Z_]\w*)(?![\(\w])','match');
>> C{:}
ans = var1
ans = _var2
ans = var3
ans = var5
If you want to develop regular expressions then you might be interested in downloading my simple Interactive Regular Expression tool:
0 Kommentare
Siehe auch
Kategorien
Mehr zu Logical finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!