Regex 价格为英镑的正则表达式

Regex 价格为英镑的正则表达式,regex,Regex,我有:\\\\\d+\.\d\d 应发现:6.95英镑16.95英镑等 +是一个还是多个 \.是圆点吗 \d代表一个数字 我错了吗 用于Greasemonkey的JavaScript // ==UserScript== // @name CurConvertor // @namespace CurConvertor // @description noam smadja // @include http://www.zavvi.com/* //

我有:\\\\\d+\.\d\d

应发现:6.95英镑16.95英镑等 +是一个还是多个 \.是圆点吗 \d代表一个数字

我错了吗

用于Greasemonkey的JavaScript

// ==UserScript==
// @name           CurConvertor
// @namespace      CurConvertor
// @description    noam smadja
// @include        http://www.zavvi.com/*
// ==/UserScript==
textNodes = document.evaluate(
                              "//text()",
                              document,
                              null,
                              XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
                              null);
var searchRE = /\£[0-9]\+.[0-9][0-9];
var replace = 'pling';
for (var i=0;i<textNodes.snapshotLength;i++) {
    var node = textNodes.snapshotItem(i);
    node.data = node.data.replace(searchRE, replace);
}

例如,当我将正则表达式更改为/Free时,它会查找并更改。但我想我错过了什么

你没有错,但有几件事需要注意:

符号不是标准ASCII字符,因此可能存在编码问题,或者可能需要在正则表达式上启用unicode选项。 并非所有正则表达式引擎都支持使用\d。[0-9]或[:digit:]是其他可能性。
为了得到更好的答案,请说出您使用的是哪种语言,最好也发布您的源代码。

这取决于您使用的正则表达式的风格-什么是编程语言

一些旧版本的regex要求+转义,例如sed和vi

此外,一些旧版本的正则表达式无法将\d识别为匹配的数字

大多数现代正则表达式都遵循perl语法,并且.\d+\.\d\d应该可以做到这一点,但这也取决于编码的方式-如果匹配的字符串编码方式与正则表达式不同,那么它将不匹配

以下是Python中的一个示例-在常规字符串和以u为前缀的unicode字符串中,%字符的表示方式不同:

>>> "£"
'\xc2\xa3'
>>> u"£"
u'\xa3'
>>> import re
>>> print re.match("£", u"£")
None
>>> print re.match(u"£", "£")
None
>>> print re.match(u"£", u"£")
<_sre.SRE_Match object at 0x7ef34de8>
>>> print re.match("£", "£")
<_sre.SRE_Match object at 0x7ef34e90>
>>>

不是ascii字符,所以你需要计算编码。根据语言的不同,您可能需要在正则表达式中转义%字节,或者在应用正则表达式之前将所有字符串转换为Unicode。

在Ruby中,您可以编写以下代码

/£\d+.\d{2}/

使用大括号来指定点后的位数,这会稍微清楚一点

在删除之前,您已经为最后一个问题写下了这一点

以下是你在GM脚本中遇到的问题

你在检查每一件事 页面上的文本节点,用于某些 原因这并不是导致它失败的原因 休息,但这是不必要的和缓慢的。 最好是查找文本 .price节点和.rrp中的节点 。请改为单击节点

在中创建新的regexp对象时 这样,反斜杠必须是 逃脱,例如:

var searchRE=new RegExp'\\d\\d','gi'

不是

变量 searchRE=newregexp'\d\d','gi'

所以你可以添加反斜杠,或者 按如下方式创建正则表达式:

变量 searchRE=/\d\d/gi

实际的正则表达式是 只检查像这样的数字 任意字符,将忽略5.00英镑和128.24英镑

你的替代者需要 字符串或回调函数,而不是 正则表达式对象

把它们放在一起 变化:

Xpath现在只包括p.price和p.rrp span.strke节点 搜索使用/regex/而不是新的RegExp创建的正则表达式 搜索变量现在包括目标货币符号 替换变量现在是一个函数,它用新符号替换货币符号,并将第一个匹配的子字符串乘以子字符串*5.67 for循环在循环开始时将变量设置为快照长度,而不是在每个循环开始时检查textNodes.snapshotLength。 希望有帮助

[编辑]其中一些要点不适用,因为原始问题更改了几次,但最终脚本是相关的,您可能仍然对这些要点感兴趣,因为您的脚本最初失败的原因

£[0-9]+(,[0-9]{3})*\.[0-9]{2}$
这将匹配从£dd.dd到£d[dd]*,ddd.dd的任何内容。所以它也能卖到数百万甚至数百美元

上述regexp在语法方面并不严格。例如,您可以有:1123213123.23

现在,如果您想要一个更严格的regexp,并且您100%确定价格将遵循相应的逗号和句点语法,那么使用

£[0-9]{1,3}(,[0-9]{3})*\.[0-9]{2}$

请在此处尝试regexp,看看哪些适合您,哪些不适合您。

文章顶部的regex与您的代码示例不匹配。特别是,在代码中,\后面有+而不是后面。它应该在哪里。我现在正试图找到英镑符号和%。如果有人想知道它是什么语言,GreaseMonkey正在将客户端本地JavaScript添加到网页中。很抱歉之前删除了..:/我想除非你找到这个,否则你会浪费时间的!再次抱歉!:是的,你是对的。。但是,你能解释一下我在plz上遇到的正则表达式问题吗?嗯,正如我所说,有一些问题。在当前版本中,您使用的是:/\\[0-9]\+.[0-9][0-9]/而不是/\[0-9]+\.[0-9][0-9]/不要转义磅号或+,而是转义句点\d和[0-9]是等效的。ok。当我在不带括号的情况下使用/£\d+\.\d\d/gi时,什么都没有。。括号用来保存你找到的东西?不是吗?
£[0-9]{1,3}(,[0-9]{3})*\.[0-9]{2}$