正则表达式可提取文本中的所有价格,其中价格将使用“,”作为小数点分隔符。没有成千上万的分隔符,后跟“ UDS”。例如:
1500 USD
9 USD
0,53 USD
12,01 USD
^[^0]\d+(\,)?[0-9]{0,2} USD
它适用于:
1500 USD
12,01 USD
但不适用于:
9 USD
0,53 USD
答案 0 :(得分:2)
在JavaScript中
/^\d{1,}(,\d{2}){0,1} USD$/
var regex = /^\d{1,}(,\d{2}){0,1} USD$/;
// true result
console.log(regex.test('9 USD'));
console.log(regex.test('0,53 USD'));
console.log(regex.test('12,01 USD'));
console.log(regex.test('1500 USD'));
// false result
console.log(regex.test(' USD'));
console.log(regex.test('0,5,3 USD'));
console.log(regex.test('12,0124 USD'));
console.log(regex.test('1s500 USD'));
或执行操作
% echo "1500 USD 9 USD 0,53 USD 12,01 USD" |sed -E 's/[0-9]+(,[0-9][0-9]){0,1} USD/TRUE/g'
TRUE TRUE TRUE TRUE
选项-E启用扩展的正则表达式
答案 1 :(得分:2)
在您的模式^[^0]\d+(\,)?[0-9]{0,2} USD
的这一部分^[^0]
中,第一个^是表示字符串开头的锚点。
第二个^位于字符类的开头,其含义不同。它创建一个否定的字符类,表示它不能以0开头。
以下部分(\,)?[0-9]{0,2}
是一个可选组,用于匹配逗号(请注意,您不必对其进行转义)和0-2位数字。这样,1,
之类的值也将匹配。
没有标记语言,但是如果支持正向查找和负向查找,则可以使用此模式使用单词边界提取文本中的价格,以防止数字和USD成为较大单词的一部分。 (?<!\S)
断言直接在左边的不是非空格字符。
如果您想要整个匹配而不是仅价格,则可以匹配USD而不是使用正向超前。
(?<!\S)\d+(?:,\d{1,2})?(?= USD\b)
另一种选择是使用捕获组而不是先行记录。 (?:^|\s)
声明字符串的开头或匹配空白字符。
(?:^|\s)(\d+(?:,\d{1,2})?) USD\b
答案 2 :(得分:-1)
我的猜测是,这个简单的表达式将返回我们可能想要的:
([0-9,.]+)
无论我们可能拥有其他文本内容如何,因为此处假定我们的价格有效,因此在此不需要验证。
jex.im可视化正则表达式:
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"([0-9,.]+)";
string input = @"500 USD 9 USD 0,53 USD 12,01 USD
1500 USD 12,01 USD 9 USD 0,53 USD 1500 USD 12,01 USD 9 USD 0,53 USD ";
RegexOptions options = RegexOptions.Multiline;
foreach (Match m in Regex.Matches(input, pattern, options))
{
Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
}
}
}
const regex = /([0-9,.]+)/gm;
const str = `500 USD 9 USD 0,53 USD 12,01 USD
1500 USD 12,01 USD 9 USD 0,53 USD 1500 USD 12,01 USD 9 USD 0,53 USD `;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}