【问题标题】:Regex for calcul [duplicate]计算的正则表达式 [重复]
【发布时间】:2019-08-30 07:59:02
【问题描述】:

我有一个代表计算的字符串,我想使用正则表达式替换所有以 $ 开头的数据。

示例:

value : $Var1+10*$Var2/$Var3-$Var4

我想要4组:

$Var1 $Var2 $Var3 $Var4

我试过这个正则表达式:

 \$.+?)[+-\/*]

3 第一组($Var1 $Var2 $Var3) 可以,但$Var4 不行。 这是因为$Var4 就在字符串结尾之前,我找不到在列表中添加“字符串结尾”的解决方案。

我试过了:

\$.+?)[+-\/*$] 

\$.+?)[+-\/*\$]

但不起作用。

所以我喜欢在我的列表 [] 中添加“字符串结尾”的任何解决方案。

谢谢,

查理

【问题讨论】:

  • 这是一个众所周知的问题,你不能在字符类中使用零宽度断言,它们在那里失去了特殊意义。你可以做的是一个交替组,或者完全修改整个模式(最好)。 \$.+?)[+-\/*] 无法工作,因为 1) 有一个不成对的括号,并且 2) - 创建了一个范围,您必须将 - 放在类的开头/结尾或转义它。

标签: c# regex


【解决方案1】:

如果你想要一个为你提供变量名的正则表达式,那就是它:

\$Var\d+

您无需添加任何内容即可从字符串的开头或结尾开始搜索。正则表达式不需要这个。对于您的测试字符串 "$Var1+10*$Var2/$Var3-$Var4" 这将简单地返回所有变量名称。见here

如果您的变量名不一定包含 Var 但总是以美元符号开头,那么您可以使用下面的正则表达式来匹配它们。

\$\w+

【讨论】:

  • 谢谢,这正是我想要的 :))
猜你喜欢
  • 2019-07-08
  • 2017-11-23
  • 2016-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多