为什么我不能将转换后的字节正则表达式为字符串?



我的问题是,当我正则表达式一个字符串变量它的工作,但当我转换一个字节对象字符串,然后正则表达式字符串它返回一个空列表,这是我的代码。

simple.cpp:

#include <iostream>
using namespace std;
string a = "ABC";
int main() {
cout << "Hello World!";
return 0;
} 

program.py

import subprocess as subs
import re

file = "simple.cpp"
full_ast = subs.run(["clang -Xclang -ast-dump %s" % file], shell=True, stdout=subs.PIPE)

s = ("test | |-UsingDirectiveDecl 0x16de688 <line:58:3, col:24> col:24 Namespace 0x16de588 '__debug' testn"
"test |-UsingDirectiveDecl 0x1e840b8 <simple.cpp:2:1, col:17> col:17 Namespace 0x1378e98 'std' test")

pattern = r"UsingDirectiveDecls0x[a-f0-9]{7}s+<simple.cpp:[0-9]+:[0-9]+,s[a-zA-Z]+:[0-9]+>s[a-zA-Z]+:[0-9]+sNamespaces0x[a-f0-9]{7}s'[^']*'"
s_full_ast = str(full_ast.stdout)
namespace_s = re.findall(pattern, s) # Switch between s and s_full_ast
print(namespace_s)

我想知道为什么它不工作,我怎么能解决它。如有任何帮助,不胜感激。

你不是在创建你认为自己是的字符串:

>>> str(b'foo')
"b'foo'"  # not 'foo'

您想要解码bytes值。

>>> b'foo'.decode()
'foo'
如果您提供text

关键字参数,subprocess可以为您完成此操作。

>>> subprocess.run("echo foo", shell=True, stdout=subprocess.PIPE).stdout
b'foon'
>>> subprocess.run("echo foo", shell=True, stdout=subprocess.PIPE, text=True).stdout
'foon'

(您可能还需要提供encoding参数来指定应该使用什么编码来将命令写入的字节转换为str。)

相关内容

  • 没有找到相关文章

最新更新