Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 查找模式的所有匹配项并在文本中替换它们_Python_Regex_Match - Fatal编程技术网

Python 查找模式的所有匹配项并在文本中替换它们

Python 查找模式的所有匹配项并在文本中替换它们,python,regex,match,Python,Regex,Match,我有一个模式如下: measurement = re.compile("(\d+(?:\.\d*)?)\s*x\s*(\d+(?:\.\d*)?)\s*(cm|mm|millimeter|centimeter|millimeters|centimeters)") 它可以在一个句子和一份文件中多次出现。我想找到所有匹配项并用“MEASUREMENT”替换它,还想在列表中添加它的值 **Input_Text**: measuring 9 x 5 mm and previously measurin

我有一个模式如下:

measurement = re.compile("(\d+(?:\.\d*)?)\s*x\s*(\d+(?:\.\d*)?)\s*(cm|mm|millimeter|centimeter|millimeters|centimeters)")
它可以在一个句子和一份文件中多次出现。我想找到所有匹配项并用“MEASUREMENT”替换它,还想在列表中添加它的值

**Input_Text**: measuring 9 x 5 mm and previously measuring 8 x 6 mm

**Output**: measuring MEASUREMENT and previously measuring MEASUREMENT

**List**: 9 x 5 mm, 8 x 6 mm
到目前为止,我的代码如下,但它只带来了第一个匹配项:

result = re.search(measurement, Input_Text)
                    if result:
                        Input_Text = Input_Text.replace(result, "MEASUREMENT") 
您可以使用进行替换,并
re.findall()
获取所有匹配的字符串

measurement=re.compile((\d+(?:\。\d*))\s*x\s*(\d+(?:\。\d*)?)\s*(厘米毫米厘米)
text=“测量9 x 5 mm,之前测量8 x 6 mm”
values=re.findall(模式=测量,字符串=文本)
sub_text=re.sub(模式=measurement,字符串=text,repl='measurement')
>>>子文本
“测量和先前测量”
>>>价值观
[('9','5','mm'),('8','6','mm')]
您可以用于替换,并使用
re.findall()
获取所有匹配的字符串

measurement=re.compile((\d+(?:\。\d*))\s*x\s*(\d+(?:\。\d*)?)\s*(厘米毫米厘米)
text=“测量9 x 5 mm,之前测量8 x 6 mm”
values=re.findall(模式=测量,字符串=文本)
sub_text=re.sub(模式=measurement,字符串=text,repl='measurement')
>>>子文本
“测量和先前测量”
>>>价值观
[('9','5','mm'),('8','6','mm')]

如果不想对字符串进行两次解析,可以使用
re.sub
和函数作为替换参数。使用此函数,您可以轻松填充匹配字符串的列表

pat = re.compile(r'\d+(?:\.\d*)?\s*x\s*\d+(?:\.\d*)?\s*(?:cm|mm|millimeters?|centimeters?)')

s = r'measuring 9 x 5 mm and previously measuring 8 x 6 mm'

l = []

def repl(m):
    l.append(m.group(0))
    return 'MEASUREMENT'

s = pat.sub(repl, s)

如果不想两次解析字符串,可以使用
re.sub
和函数作为替换参数。使用此函数,您可以轻松填充匹配字符串的列表

pat = re.compile(r'\d+(?:\.\d*)?\s*x\s*\d+(?:\.\d*)?\s*(?:cm|mm|millimeters?|centimeters?)')

s = r'measuring 9 x 5 mm and previously measuring 8 x 6 mm'

l = []

def repl(m):
    l.append(m.group(0))
    return 'MEASUREMENT'

s = pat.sub(repl, s)

使用
re.finditer(模式、字符串)
;)。无论如何,您不能在文本中替换
结果
;这是一个。那么为什么会有一个单独的
findings\u部分
变量呢?这与
Input_Text
相同吗?使用
re.finditer(模式、字符串)
)。无论如何,您不能在文本中替换
结果
;这是一个。那么为什么会有一个单独的
findings\u部分
变量呢?这和输入文本是一样的吗?来自这里:它对我有用。来自这里:它对我有用。