【问题标题】:tcl regexp for US Number美国号码的 tcl 正则表达式
【发布时间】:2017-03-17 20:56:25
【问题描述】:

建议的美国号码的正则表达式here

^[+-]?(\d*|\d{1,3}(,\d{3})*)(\.\d+)?\b$

工作得很好。我尝试了几个使用此服务的示例https://regex101.com/

但是,使用 tcl 的正则表达式如下:

regexp { ^[+-]?(\d*|\d{1,3}(,\d{3})*)(\.\d+)?\b$ } 120.00

返回“0”。

我到了tcl“引用地狱”吗?

【问题讨论】:

  • 如果您的目标是研究正则表达式,那么数字字符串是一个很好的工作领域。如果您的目标是识别数字字符串,那么调用 string is double -strict [string map {, {}} $candidate] 会快得多且不会那么混乱。

标签: regex tcl


【解决方案1】:

\btcl regular expressions 中的退格键。我怀疑你想要\m\M

% regexp -inline {\m[+-]?(\d*|\d{1,3}(,\d{3})*)(\.\d+)?\M} " 120.00 "
120.00 120 {} .00

我不知道您是否也想匹配数字两侧的空格。但是大括号之间的所有内容都是正则表达式的一部分,因此您正在寻找一个空格,后跟可选的加号或减号,后跟数字等。由另一个空格终止。正如你写的那样,你的测试字符串中没有空格。

【讨论】:

  • 你应该删除\m,我认为不需要它,如果一个数字以+-开头,它将失败。
猜你喜欢
  • 1970-01-01
  • 2020-05-02
  • 2018-01-23
  • 1970-01-01
  • 2015-11-22
  • 1970-01-01
  • 2012-04-04
  • 1970-01-01
相关资源
最近更新 更多