我有一个像这样的字符串'6\' 3" ( 190 cm )'
,我只想使用正则表达式提取'190 cm'
。我找不到适合的模式。
我尝试过
string = '6\' 3" ( 190 cm )'
pattern = re.compile(r'[^\\( 0-9+ \\)]')
pattern.findall(a)
但返回 [“'”,'“','c','m']
感谢您的帮助!
答案 0 :(得分:3)
print re.findall(r'[0-9]+ cm',string)[0]
其中string
是:
'6\' 3" ( 190 cm )'
答案 1 :(得分:2)
表达式中不必要的有害符号过多。
使用[]
周围的findall
来匹配各个字符,这说明了您得到的输出。
这需要重新考虑:转义括号,使用\d+
匹配一个或多个数字,并使用显式cm
和空格。
创建一个仅匹配数字和单位的组,使用search
查找并显示该组。
import re
string = '6\' 3" ( 190 cm )'
pattern = re.compile(r'\( (\d+ cm) \)')
>>> pattern.search(string).group(1)
'190 cm'
答案 2 :(得分:2)
使用正则表达式:
import re
s = '6\' 3" ( 190 cm )'
desired_output = re.search(r'\((.*?)\)',s).group(1).lstrip()
print(desired_output)
>>> 190 cm
没有正则表达式:
s = '6\' 3" ( 190 cm )'
desired_output = s[s.find("(")+1:s.find(")")].lstrip()
print(desired_output)
>>> 190 cm
答案 3 :(得分:1)
您可以使用捕获组,该捕获组将由findall返回:
\(\s*([0-9]+\s*[a-z]+)\s*\)
这将匹配:
\(\s*
匹配(
,并且0+次是空白字符(
捕获组
[0-9]+\s*[a-z]+
匹配1+个数字,0 +倍空白字符和1+倍az(如果要字面匹配,请使用cm
而不是[a-z]+
))
关闭捕获组\s*\)
匹配0+次空白字符例如:
import re
string = '6\' 3" ( 190 cm )'
pattern = re.compile(r"\(\s*([0-9]+\s*[a-z]+)\s*\)")
print(pattern.findall(string))