不检索任何结果的模式
Pattern for re not retriving any results
我正在尝试在 python 中创建一个重新模式来提取这种文本模式。
contentId: '2301ae56-3b9c-4653-963b-2ad84d06ba08'
内容编号:'a887526b-ff19-4409-91ff-e1679e418922'
内容 ID 的长度为 36 个字符,在位置 8、13、18、23、36 处包含小写字母和带破折号的数字。
我将不胜感激,因为我现在似乎无法立即获得结果。
r1 = re.findall(r'^[a-zA-Z0-9~@#$^*()_+=[\]{}|\,.?: -]*{36}$',f.read())
print(r1)
下面是我要从中提取的文件
Object.defineProperty(e, '__esModule', { value: !0 }), e.default = void 0;
var t = r(d[0])(r(d[1])), n = r(d[0])(r(d[2])), o = r(d[0])(r(d[3])), c = r(d[0])(r(d[4])), l = r(d[0])(r(d[5])), u = function (t) {
return [
{
contentId: '2301ae56-3b9c-4653-963b-2ad84d06ba08',
prettyId: 'super',
style: { height: 0.5 * t }
},
{
contentId: 'a887526b-ff19-4409-91ff-e1679e418922',
prettyId: 'zap',
style: { height: t }
}
];
},
您问题中的正则表达式是否有拼写错误? *{36}
在关闭字符组的括号 ]
之后导致 error: multiple repeat
。您是说 r'^[a-zA-Z0-9~@#$^*()_+=[\]{}|\,.?: -]{36}$'
吗?
解决这个问题,你得不到任何结果,因为 ^
将匹配锚定到行的开头,而 $
锚定到行的末尾,所以你只会得到结果如果这模式单独在一条线上。
删除这些锚点,我们得到 lots 个匹配项,因为它匹配 any 个 36 长字符的字符串:
r1 = re.findall(r'[a-zA-Z0-9~@#$^*()_+=[\]{}|\,.?: -]{36}',t)
r1: ['var t = r(d[0])(r(d[1])), n = r(d[0]',
')(r(d[2])), o = r(d[0])(r(d[3])), c ',
'= r(d[0])(r(d[4])), l = r(d[0])(r(d[',
'2301ae56-3b9c-4653-963b-2ad84d06ba08',
' style: { height: 0.5',
'a887526b-ff19-4409-91ff-e1679e418922',
' style: { height: t }']
要仅匹配您的 ID,请仅查找字母数字字符或破折号。
r1 = re.findall(r'[a-zA-Z0-9\-]{36}',t)
r1: ['2301ae56-3b9c-4653-963b-2ad84d06ba08',
'a887526b-ff19-4409-91ff-e1679e418922']
为了更加具体,您可以指定破折号的位置:
r1 = re.findall(r'[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}', t, re.IGNORECASE)
r1: ['2301ae56-3b9c-4653-963b-2ad84d06ba08',
'a887526b-ff19-4409-91ff-e1679e418922']
指定 re.IGNORECASE
标志可以消除同时查找大写和小写字符的需要。
注:
如果要多次使用其内容,则应将文件读入变量并使用该变量,因为 f.read()
在第一个 .read()
除非你f.seek(0)
为了避免使用这些内容在磁盘上创建新文件,我刚刚定义了
t = """Object.defineProperty(e, '__esModule', { value: !0 }), e.default = void 0;
var t = r(d[0])(r(d[1])), n = r(d[0])(r(d[2])), o = r(d[0])(r(d[3])), c = r(d[0])(r(d[4])), l = r(d[0])(r(d[5])), u = function (t) {
return [
{
contentId: '2301ae56-3b9c-4653-963b-2ad84d06ba08',
prettyId: 'super',
style: { height: 0.5 * t }
},
{
contentId: 'a887526b-ff19-4409-91ff-e1679e418922',
prettyId: 'zap',
style: { height: t }
}
];
},"""
并使用 t
代替您问题中的 f.read()
。
我正在尝试在 python 中创建一个重新模式来提取这种文本模式。
contentId: '2301ae56-3b9c-4653-963b-2ad84d06ba08' 内容编号:'a887526b-ff19-4409-91ff-e1679e418922'
内容 ID 的长度为 36 个字符,在位置 8、13、18、23、36 处包含小写字母和带破折号的数字。
我将不胜感激,因为我现在似乎无法立即获得结果。
r1 = re.findall(r'^[a-zA-Z0-9~@#$^*()_+=[\]{}|\,.?: -]*{36}$',f.read())
print(r1)
下面是我要从中提取的文件
Object.defineProperty(e, '__esModule', { value: !0 }), e.default = void 0;
var t = r(d[0])(r(d[1])), n = r(d[0])(r(d[2])), o = r(d[0])(r(d[3])), c = r(d[0])(r(d[4])), l = r(d[0])(r(d[5])), u = function (t) {
return [
{
contentId: '2301ae56-3b9c-4653-963b-2ad84d06ba08',
prettyId: 'super',
style: { height: 0.5 * t }
},
{
contentId: 'a887526b-ff19-4409-91ff-e1679e418922',
prettyId: 'zap',
style: { height: t }
}
];
},
您问题中的正则表达式是否有拼写错误? *{36}
在关闭字符组的括号 ]
之后导致 error: multiple repeat
。您是说 r'^[a-zA-Z0-9~@#$^*()_+=[\]{}|\,.?: -]{36}$'
吗?
解决这个问题,你得不到任何结果,因为 ^
将匹配锚定到行的开头,而 $
锚定到行的末尾,所以你只会得到结果如果这模式单独在一条线上。
删除这些锚点,我们得到 lots 个匹配项,因为它匹配 any 个 36 长字符的字符串:
r1 = re.findall(r'[a-zA-Z0-9~@#$^*()_+=[\]{}|\,.?: -]{36}',t)
r1: ['var t = r(d[0])(r(d[1])), n = r(d[0]',
')(r(d[2])), o = r(d[0])(r(d[3])), c ',
'= r(d[0])(r(d[4])), l = r(d[0])(r(d[',
'2301ae56-3b9c-4653-963b-2ad84d06ba08',
' style: { height: 0.5',
'a887526b-ff19-4409-91ff-e1679e418922',
' style: { height: t }']
要仅匹配您的 ID,请仅查找字母数字字符或破折号。
r1 = re.findall(r'[a-zA-Z0-9\-]{36}',t)
r1: ['2301ae56-3b9c-4653-963b-2ad84d06ba08',
'a887526b-ff19-4409-91ff-e1679e418922']
为了更加具体,您可以指定破折号的位置:
r1 = re.findall(r'[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}', t, re.IGNORECASE)
r1: ['2301ae56-3b9c-4653-963b-2ad84d06ba08',
'a887526b-ff19-4409-91ff-e1679e418922']
指定 re.IGNORECASE
标志可以消除同时查找大写和小写字符的需要。
注:
如果要多次使用其内容,则应将文件读入变量并使用该变量,因为
f.read()
在第一个.read()
除非你f.seek(0)
为了避免使用这些内容在磁盘上创建新文件,我刚刚定义了
t = """Object.defineProperty(e, '__esModule', { value: !0 }), e.default = void 0;
var t = r(d[0])(r(d[1])), n = r(d[0])(r(d[2])), o = r(d[0])(r(d[3])), c = r(d[0])(r(d[4])), l = r(d[0])(r(d[5])), u = function (t) {
return [
{
contentId: '2301ae56-3b9c-4653-963b-2ad84d06ba08',
prettyId: 'super',
style: { height: 0.5 * t }
},
{
contentId: 'a887526b-ff19-4409-91ff-e1679e418922',
prettyId: 'zap',
style: { height: t }
}
];
},"""
并使用 t
代替您问题中的 f.read()
。