此问题已在此处有答案:
re.findall behaves weird(3个答案)
3天前关闭。
这篇文章是编辑并提交审查2天前.
我试图编写一个机器人程序来检测字符串中的给定部分,一个字母和一个数字,数字可以是一个int或一个double,这个正则表达式是什么?我看到过类似的问题,但是**两个正则表达式代码实际上都不能检测到其中一个,它们总是被双精度数打断。
我试过"?(?=\d+\.\d+)\d+\.\d+|\d+) "
和\\d+(\\.\\d+)?
,但它失败了。
import re
a = 'w2.2'
seconds = re.findall("\\d+(\\.\\d+)?"), a)
a = re.sub('[^a-zA-Z]+', '', a)
3条答案
按热度按时间wnrlj8wa1#
"?(?=\d+\.\d+)\d+\.\d+|\d+) "
和\\d+(\\.\\d+)?
,但失败了。..."*你的第一个模式是无效的,而你的第二个模式是正确的,至少对于数字部分是正确的。
?
是一个量词,它仅用于表示前面元素的数量。因此,初始值
?
在这里是不必要的。此外,括号不平衡-缺少一个左括号
(?= )
语法是一个 look-around 组,在本例中,这是不必要的。Wikipedia提供了关于 * 正则表达式模式 * 语法的优秀文档。
在第二种模式中,不需要捕获组。
你可以使用一个 * 非捕获组 *,语法是,
(?: )
。最后的模式如下。
此外,您应该使用
r
说明符来表示 Python 字符串。这被称为 raw string,允许您提供非转义的转义字符。
'r'
或'R'
作为前缀;这样的字符串被称为原始字符串,并且将反斜杠视为文字字符。..."*此外,您可以使用 re.finditer 函数返回匹配值的集合。
输出量
下面是一个例子,有多个匹配项。
输出量
yhqotfr82#
看看这个
[a-zA-Z]
:匹配任意大写或小写字母\d+
:匹配一个或多个数字(\.\d+)?
:匹配一个可选的小数点,后跟一个或多个数字让我给予你一个例子,它将返回一个列表,其中包含在输入字符串中找到的所有匹配项
结果:
o7jaxewo3#
要匹配后跟整数或双精度型的字母,可以按如下方式修改正则表达式模式:
在这个正则表达式模式中:
\d+
匹配一个或多个数字。\.?
匹配可选的点。\d*
匹配点后的零个或多个数字。|
这是逻辑OR运算符,允许匹配它之前或之后的模式。[a-zA-Z]\.\d+
此部分匹配一个字母字符,后跟一个点字符和一个或多个数字。此模式将正确匹配整数和双精度数。
关于代码中的
re.sub
行,似乎您正在从字符串a中删除所有非字母字符。如果这是你想要的行为,代码应该是: