正则表达式,用于匹配两个数字之间的字符列表

时间:2019-04-28 19:14:20

标签: regex regression

当导入商品说明中的在线商店时,我需要删除一些标签。它们在数字之间。

正是正则表达式是必要的,因为在数字中的那组标记集已经存在于文档中的许多地方。并且使用替换搜索,该文档已损坏。

如何删除多余的标签,并在其中加上破折号?

数字可能不同。

尝试

[0-9](.*)[0-9]

输入

 13</li></ul></div><div><p>20 kg

输出:

 13-20 kg

3 个答案:

答案 0 :(得分:1)

您需要做的是找到第一个数字,后跟非数字字符,然后找到第二个数字,后跟空格或字母字符,这就是我要这样做的方式:

$str = "13</li></ul></div><div><p>20 kg";

echo $res = preg_replace('/^([0-9]+)[^0-9]+([0-9]+[a-z ]+)$/', '\1-\2', $str);

\1\2是捕获组() ([0-9]+)([0-9]+[a-z ]+)的反向引用

但是,请确保字符串与您发布的字符串完全相同,因为例如abc 13</li></ul></div><div><p>20 kg不适用于此模式。

答案 1 :(得分:1)

This RegEx可能会帮助您捕获目标输出:

([0-9]+)([A-Za-z\<\>\/\\]+)([0-9]+)

enter image description here

您可以简单地使用 $ 2 来调用它,这是第二个捕获组,它可能捕获所需的输出。

如果愿意,可以进一步简化它,或者在必要时添加其他边界。

如果您希望过滤HTML,则RegEx可能不是最佳方法。但是,如果您想练习,可以考虑使用/更新表达式,也许类似于this RegEx

([0-9]+)([A-Za-z\<\>\/\\]+)([0-9]+\skg)

有三个捕获组,只是为了易于使用,它们的目标对象是 \ 1- \ 3 \ 1- \ 3 。如果愿意,可以添加其他特定于语言的字符或转义字符。

enter image description here

答案 2 :(得分:1)

您似乎正在解析的内容看起来像HTML,您应该首先尝试避免使用正则表达式来解析HTML。但是有时候,当您处理非嵌套结构并想要快速完成工作时,可以使用regex。试试这个正则表达式,

(\d+)\D+(\d+)

并用\1-\2

替换

这基本上将开始使用(\d+)捕获一个或多个数字的模式并将其捕获到组1中,然后将使用\D+匹配一个或多个非数字的模式,并且不会将它们捕获到任何组中在替换时将它们排除在外,最后再次将使用(\d+)捕获一个或多个数字并捕获到group2中,并用\1-\2(或根据您的正则表达式来替换$1-$2)替换整个匹配项保留数字并在它们之间仅放置连字符。

Regex Demo

相关问题