Regex 如何构建一个ICU正则表达式来匹配这种字符串?

Regex 如何构建一个ICU正则表达式来匹配这种字符串?,regex,string,Regex,String,嗨,我需要一个ICU正则表达式,我认为这是非常基本的,但我不知道如何建立它的权利。正则表达式应该匹配如下字符串: font-size: 9pt; font-size: 15pt; font-size:2pt; font-size:22pt; 我正试着做这样的东西,但没用: regex = \bfont\-size: [0-9]{3}pt;\b 我对regex很陌生,所以我不确定我在这里做错了什么。非常感谢您的帮助 旁白:有人知道一个好的资源来掌握这个快速的窍门吗?font-size\:?[0

嗨,我需要一个ICU正则表达式,我认为这是非常基本的,但我不知道如何建立它的权利。正则表达式应该匹配如下字符串:

font-size: 9pt;
font-size: 15pt;
font-size:2pt;
font-size:22pt;
我正试着做这样的东西,但没用:

regex = \bfont\-size: [0-9]{3}pt;\b
我对regex很陌生,所以我不确定我在这里做错了什么。非常感谢您的帮助


旁白:有人知道一个好的资源来掌握这个快速的窍门吗?

font-size\:?[0-9]{1,3}pt\

我们应该做到这一点。本质上,转义所有非字母数字字符(为了安全起见)。另外,
{1,3}
表示从1到3次重复0-9,而不是总是重复3次

编辑: 更新了上述正则表达式。删除了尾随的
\b
,并使用
将数字前的空格设置为可选

Python演示:

>>> import re
>>> s = """
... font-size: 9pt;
... font-size: 15pt;
... font-size:2pt;
... font-size:22pt;
... """
>>> re.findall("font\-size\: ?[0-9]{1,3}pt\;", s)
['font-size: 9pt;', 'font-size: 15pt;', 'font-size:2pt;', 'font-size:22pt;']

我发现您的正则表达式存在两个问题:

  • {3}
    正好匹配三件事。您可能希望
    {1,3}
    匹配1到3

  • 我不认为
    \b
    会在分号后面做你想做的事。也许您需要类似于
    \s*
    (零个或更多空格)的内容


  • 如果你想快速学习正则表达式,最好的办法可能是使用一个函数和一个实验。

    太好了,谢谢!我该如何改变它来匹配这种字符串,但要使用十进制数?e、 g.字体大小:9.5pt;我试过:font \-size\:?[0-9]{1,3}(\.[0-9]+)?pt\;但它不起作用。这太令人沮丧了……一个非常简单的方法是
    font \-size\:?[0-9\.]{1,3}pt\,但它也会匹配9.5.2pt之类的东西。(编辑:实际上它不匹配9.5.2,因为它只匹配3个字符,呵呵。)你的正则表达式没有问题,也许你用错了。谢谢你的时间和帮助!你是对的,我用错了。现在可以了。