Python正则表达式:提取字符串中所有出现的子字符串

Python正则表达式:提取字符串中所有出现的子字符串,python,regex,string,Python,Regex,String,我试图使用Python正则表达式提取字符串中出现的所有子字符串。这就是我尝试过的: import re line = "The dimensions of the first rectangle: 10'x20', second rectangle: 10x35cm, third rectangle: 30x35cm" m = re.findall(r'\d+x.*?[a-zA-Z]', line) print (m) 我得到的输出是['10x35c','30x35c']

我试图使用Python正则表达式提取字符串中出现的所有子字符串。这就是我尝试过的:

import re
line = "The dimensions of the first rectangle: 10'x20', second rectangle: 10x35cm, third rectangle: 30x35cm"
m = re.findall(r'\d+x.*?[a-zA-Z]', line)
print (m)
我得到的输出是
['10x35c','30x35c']


我试图实现的输出是
['10'x20','10x35cm','30x35cm']

您可以使用
regex来实现这一点:

In [1089]: m = [i.split(':')[1].strip() for i in line.split(',')]

In [1090]: m
Out[1090]: ["10'x20'", '10x35cm', '30x35cm']

您可以使用此正则表达式:

r"\d+['\"]?x\d+['\"]?(?:\s*[a-zA-Z]+)?"

代码:

>>重新导入
>>>line=“第一个矩形的尺寸:10'x20',第二个矩形:10x35cm,第三个矩形:30x35cm”
>>>打印(关于findall(r“\d+['\'”]?x\d+['\'”]?(?:\s*[a-zA-Z]+)?”,第行))
[“10'x20'”、“10x35cm”、“30x35cm”]
正则表达式详细信息:

  • \d+
    :匹配1+个数字
  • ['\']?
    :匹配可选的
    '
  • x
    :匹配字母
    x
  • \d+
    :匹配1+个数字
  • ['\']?
    :匹配可选的
    '
  • (?:\s*[a-zA-Z]+)?
    :匹配包含1+个字母的可选单位
使用

重新导入
string=“第一个矩形的尺寸:10'x20',第二个矩形:10x35cm,第三个矩形:30x35cm”
打印(re.findall(r“”“\d+”?x\d+”?(?:*[a-z]+)?“”),字符串,re.I))
结果
[“10'x20'”、“10x35cm”、“30x35cm”]

re.I
表示不区分大小写的匹配

说明

In [1089]: m = [i.split(':')[1].strip() for i in line.split(',')]

In [1090]: m
Out[1090]: ["10'x20'", '10x35cm', '30x35cm']
--------------------------------------------------------------------------------
\d+数字(0-9)(1次或多次(匹配
尽可能多的钱)
--------------------------------------------------------------------------------
'?                       '\'' (可选)(与最大金额匹配)
(可能的)
--------------------------------------------------------------------------------
x'x'
--------------------------------------------------------------------------------
\d+数字(0-9)(1次或多次(匹配
尽可能多的钱)
--------------------------------------------------------------------------------
'?                       '\'' (可选)(与最大金额匹配)
(可能的)
--------------------------------------------------------------------------------
(?:组,但不捕获(可选)
(匹配尽可能多的金额):
--------------------------------------------------------------------------------
*''(0或更多次(匹配最大
(可能的金额)
--------------------------------------------------------------------------------
[a-z]+从'a'到'z'(1个或更多)的任何字符
次数(匹配尽可能多的数量))
--------------------------------------------------------------------------------
)?                       分组结束

你可以使用这个正则表达式:
\d+'?x\d+'?(?:[a-zA-Z]+)?
试着用英语解释你想做什么,谢谢你的努力,但我想使用正则表达式。@Animeartist肯定。但是如果有任何帮助的话,不妨考虑一下投票的结果。