【问题标题】:Regular Expression to extract a number from inside a custom string从自定义字符串中提取数字的正则表达式
【发布时间】:2014-10-21 16:01:59
【问题描述】:

我正在学习正则表达式。

我正在尝试找到编写表达式的最佳方法,该表达式从字符 R" 后面的括号中提取一个数字,所以:

示例 1:

String("257*5.6+48.9/2*R(64)")

reg ex 在这种情况下会返回 R() 中的数值 64。

示例 2:

String("sin(45)*55 + X^2+R(-64.525)")

reg ex 在这种情况下会返回 R() 中的数值 -64.525

到目前为止我的表达是:

/R\(\-?\d+\.?\d+\)/g

在考虑可能的小数位和负值的情况下返回 R(number)。

是否有更好的正则表达式来匹配(返回)字符 R 后面括号内的数字?

非常感谢您的建议/帮助。

D

【问题讨论】:

  • 你使用什么语言?
  • 嗨,我正在使用 ActionScript 3。
  • ...摘自 Adob​​e 网站:“ActionScript 3.0 实现了 ECMAScript 第 3 版语言规范 (ECMA-262) 中定义的正则表达式”

标签: regex


【解决方案1】:

如果您使用的是 JavaScript 以外的正则表达式引擎,则可以使用 positive lookaround assertions

/(?<=R\()-?\d+\.?\d*(?=\))/g

【讨论】:

  • 我认为您将 \.?\d* 放入您的正则表达式而不是 (?:\.\d+)? 是一个错误,我将删除我的答案,因为它与您的答案最相似,除了我提到的那个。
  • @AvinashRaj:你说得对,这只是一个快速而肮脏的修复,以便不阻止匹配个位数整数。但是谁知道哪些数字格式是有效的(.12. 可能都是有效的,所以我们的正则表达式都不是最终的解决方案)...
【解决方案2】:

从索引 1 获取匹配组

R\((-?\d+(\.\d+)?)\)

Online demo


也可以使用圆括号来获得所需的输出:

R\(([^\)]*)

Online Demo

模式说明:

  R                        'R'
  \(                       '('
  (                        group and capture to \1:
    [^\)]*                   any character except: '\)' (0 or more times)
  )                        end of \1

尝试Positive Look behind,它不消耗字符串中的字符,而仅断言如果语言支持匹配是否可能:

(?<=R\()[^\)]*

Online demo

【讨论】:

  • 嗨,Braj,在 AS3 中,您的第二个建议有效 (?regexr.com 更兼容。我对 RegEx 了解得不够多,无法评论原因。
【解决方案3】:
R\((\S+?)\)

你可以试试这个。查看演示。

http://regex101.com/r/dK1xR4/11

【讨论】:

  • 我无法让它只返回 AS3 中的数字,尽管它显然适用于测试站点。
  • @user2190690 试试 R((.*?))
猜你喜欢
  • 2011-05-10
  • 2014-08-25
  • 1970-01-01
  • 1970-01-01
  • 2011-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-09
相关资源
最近更新 更多