2024-06-02 06:56:22 发布
网友
我想把数字,正数或负数,可能前面有货币符号。但我不想要类似PSM-9的东西。我的代码是:
test='AAA PCSK-9, $111 -3,33' re.findall(r'\b-?[$€£]?-?\d+[\d,.]*\b', test)
输出为:['-9', '111', '3,33'] 有人能解释为什么-9匹配吗?先谢谢你。你知道吗
['-9', '111', '3,33']
编辑: 我不知道PCSK-9的任何部分是匹配的,它就像一个产品的名称,而不是一个数字。所以我想要的结果是:
['111', '3,33']
K和破折号之间的word boundary匹配。由于问号的原因,破折号[$€£]?-?后面的两个部分是可选的,然后一个数字匹配一次或多次。这将导致匹配-9
[$€£]?-?
-9
您可以使用一个断言来代替单词边界,该断言使用负lookbehind和负lookahead检查匹配前后的内容是否不是非空格字符\S。你知道吗
\S
(?<!\S)-?[$€£]?(\d+(?:[,.]\d+)?)(?!\S)
Regex demo| Python demo
-9匹配,因为-是非单词字符,S是单词字符。。。所以在这两者之间有一个词间边界\b,正如您在regexp中所述。你知道吗
-
S
\b
这是因为\b匹配K和-之间的间隙,即单词和非单词字符。如果要避免匹配-如果它前面有一个单词,可以改用负lookback:
K
re.findall(r'[$€£]?(?:(?<!\w)-)?\d+[\d,.]*\b', test)
通过示例输入,将返回:
['9', '111', '3,33']
演示:https://regex101.com/r/A66C5W/1
K和破折号之间的word boundary匹配。由于问号的原因,破折号
[$€£]?-?
后面的两个部分是可选的,然后一个数字匹配一次或多次。这将导致匹配-9
您可以使用一个断言来代替单词边界,该断言使用负lookbehind和负lookahead检查匹配前后的内容是否不是非空格字符
\S
。你知道吗(?<!\S)-?[$€£]?(\d+(?:[,.]\d+)?)(?!\S)
Regex demo| Python demo
-9
匹配,因为-
是非单词字符,S
是单词字符。。。所以在这两者之间有一个词间边界\b
,正如您在regexp中所述。你知道吗这是因为
\b
匹配K
和-
之间的间隙,即单词和非单词字符。如果要避免匹配-
如果它前面有一个单词,可以改用负lookback:通过示例输入,将返回:
演示:https://regex101.com/r/A66C5W/1
相关问题 更多 >
编程相关推荐