我是整个正则表达式的新手,我希望得到一些基于xkcd's comics, substitution之一的小想法的帮助。
如何在double
/ int
后面跟一个"找到文字页面/部分的任何位置?或者'
那么我可以转换为cm / m并替换它吗?
Matt Dickinson已经完成了更换的腿部工作,我只是不知道如何找到这些数字?
提前谢谢! 太
答案 0 :(得分:0)
首先,您需要知道如何匹配您正在寻找的号码。本教程有助于了解如何查找浮点数:http://www.regular-expressions.info/floatingpoint.html
它很短且可读。我建议阅读它以尝试在尝试下面的任何内容之前了解更多关于你正在做的事情,但基本上你最终得到的是匹配一个数字是一个看起来像这样的正则表达式:
[-+]?[0-9]*\.?[0-9]+
如果您不需要前导符号匹配,则可以不使用[-+]?
,但无论如何它都是可选的,如果可能需要它会很好。为简洁起见,我会将[0-9]
替换为\d
,并且(在我看来)更具可读性。这给了
[-+]?\d*\.?\d+
你提到的只是匹配,如果它后跟“或”。这很容易被['"]
匹配,然后给你:
[-+]?\d*\.?\d+['"]
从技术上讲,这符合您的要求,但您可能希望更进一步。
例如,您可能不想匹配"4.3"
或5.2.4'
。要避免这些,您可能会尝试仅匹配字符串开头的内容或紧跟空格。这可以由(^|\s)
表示。但是那个包含在你的比赛中可能是不可取的。解决此问题可能需要使用lookbehind或使用子匹配。由于并非所有语言都支持lookbehind,我将沿着子匹配的路线前进,但是如何获得适当的子匹配的细节是特定于语言的。要指定您想要制作子匹配,您可以简单地在()中包围您关心的表达式部分。这导致类似
(^|\s)([-+]?\d*\.?\d+['"])
你想要第二个子匹配中的内容。这可以通过告诉你不想匹配第一个子组来改进?:在parens里面:
(?:^|\s)([-+]?\d*\.?\d+['"])
现在你想要第一个子匹配。得到子匹配是(如我所提到)语言特定的。在JavaScript中,第一个子匹配为RegExp.$1
,第二个匹配为RegExp.$2
,依此类推,直到RegExp.$9
。