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