【发布时间】:2015-08-07 07:53:14
【问题描述】:
这更多的是理解问题,而不是实际问题。情况说明如下。我在两个引号“”之间得到了一些浮点数(例如金额)。
例子:
- “1,23”
- “12,23”
- “123,23”
现在我想匹配这些表达式中的逗号。我构建了以下适用于我的正则表达式:
(?<=\"[0-9]|[0-9]{2})(,)(?=[0-9]{2}\")
我不完全理解的部分是与或“|”组合的lookbehind。但是让我们分解一下:
(
?<= //Start of the lookbehind
\" //Starting with an escaped quotation mark "
[0-9] //Followed by a digit between 0 and 9
现在我遇到了一个问题,如示例 2 和 3 中所示,引号后并不总是只有一位数字。范围运算符,例如{1,3} 在后视中不起作用。正如我在anotherstackoverflow 问题中发现的那样。
所以我决定使用或“|”建议的操作员here:
|[0-9]{2} //Or followed by two digits between 0 and 9
)
有趣的是,它还匹配第三个示例中的逗号“123,23”。我真的不明白为什么。 另外我不知道为什么我不必在或“|”之后添加起始引号再次操作符,因为我认为在 or 操作符之前的完整回顾是有必要修改或重复的,例如:
(?<=\"[0-9]|\"[0-9]{2})(,)(?=[0-9]{2}\") //This however does not work at all
所以在我的理解中,匹配所有三个示例的相应正则表达式应该如下所示:
(?<=\"[0-9]|\"[0-9]{2}|\"[0-9]{3})(,)(?=[0-9]{2}\")
或至少(如果有人能解释丢失的 \"):
(?<=\"[0-9]|[0-9]{2}|[0-9]{3})(,)(?=[0-9]{2}\")
我希望有人能够帮助我了解情况。
//编辑: 如果特别感兴趣,我在 sublime text 3 编辑器的常规文本文件中使用了这个正则表达式来搜索逗号并替换它。
【问题讨论】:
-
(?<=\"[0-9]|[0-9]{2})匹配这些示例中的所有逗号
标签: regex sublimetext3 regex-lookarounds