フィルターのクリア

complex string match with regexprep

1 回表示 (過去 30 日間)
S H
S H 2019 年 5 月 14 日
コメント済み: Adam Danz 2019 年 5 月 14 日
What should be the expression in the following script to generate out from str?
str='diff([v0(k-1,2)-v0(k-1,1) v(2)-v(1)])/diff(t0(k-1:k))+((v(2)-0)*diff(t0(k-1:k))+sum((v0(2:k-1,2)-v0(2:k-1,10)).*diff(t0(1:k-1)).'',1))';
expression = ???;
replace = '0';
out=regexprep(str,expression,replace);
out='diff([v0(k-1,2)-v0(k-1,1) v(2)-v(1)])/diff(t0(k-1:k))+((v(2)-0)*diff(t0(k-1:k))+sum((v0(2:k-1,2)-0).*diff(t0(1:k-1)).'',1))'
  7 件のコメント
S H
S H 2019 年 5 月 14 日
I tested your answer on my lengthy strings and it works as expected. Thank you for teaching me the use of [^,]* in regexprep. I was reading Matlab regexp help page a few times and such an important and helpful combination as [^,]* is not clearly explained there.
Adam Danz
Adam Danz 2019 年 5 月 14 日
There are so many options with regular expressions that it's hard to capture them all in one document. I usually just google awkward phrases like "regular expressions match any character until" to remind myself of the options. The website I suggested in my answer is another great tool.

サインインしてコメントする。

採用された回答

Adam Danz
Adam Danz 2019 年 5 月 14 日
編集済み: Adam Danz 2019 年 5 月 14 日
Here you are.
str='diff([v0(k-1,2)-v0(k-1,1) v(2)-v(1)])/diff(t0(k-1:k))+((v(2)-0)*diff(t0(k-1:k))+sum((v0(2:k-1,2)-v0(2:k-1,10)).*diff(t0(1:k-1)).'',1))';
expression = 'v0\([^,]+,10\)';
replace = '0';
out = regexprep(str, expression, replace)
Compare input/output (I added space in output for comparison)
diff([v0(k-1,2)-v0(k-1,1) v(2)-v(1)])/diff(t0(k-1:k))+((v(2)-0)*diff(t0(k-1:k))+sum((v0(2:k-1,2)-v0(2:k-1,10)).*diff(t0(1:k-1)).',1)) %input
diff([v0(k-1,2)-v0(k-1,1) v(2)-v(1)])/diff(t0(k-1:k))+((v(2)-0)*diff(t0(k-1:k))+sum((v0(2:k-1,2)-0 ).*diff(t0(1:k-1)).',1)) %output
  2 件のコメント
S H
S H 2019 年 5 月 14 日
It works nicely. Thank you very much.
Adam Danz
Adam Danz 2019 年 5 月 14 日
編集済み: Adam Danz 2019 年 5 月 14 日
Great! Just so you know...
  • v0\( Start the expression at v0(
  • [^,]+ Stop matching just before the next comma
  • ,10\) make sure the expression ends with ,10)
A nice workstation to develop regular expressions: https://regex101.com/

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeCharacters and Strings についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by