我想使用来自用户的输入作为搜索某些文本的正则表达式模式.它有效,但我如何处理用户放置在正则表达式中有意义的字符的情况?例如,用户想要搜索Word (s):正则表达式引擎将(s)作为一个组.我希望它像一个字符串一样对待它"(s)".我可以运行replace用户输入并替换(with \(和)with \)但问题是我需要替换每个可能的正则表达式符号.你知道更好的方法吗?
使用os.system()时,通常需要将作为参数传递的文件名和其他参数转义为命令.我怎样才能做到这一点?优选地,可以在多个操作系统/壳上工作但特别是用于bash的东西.
我目前正在做以下操作,但我确定必须有一个库函数,或者至少是一个更优雅/更健壮/更有效的选项:
def sh_escape(s):
return s.replace("(","\\(").replace(")","\\)").replace(" ","\\ ")
os.system("cat %s | grep something | sort > %s"
% (sh_escape(in_filename),
sh_escape(out_filename)))
Run Code Online (Sandbox Code Playgroud)
编辑:我接受了使用引号的简单答案,不知道为什么我没有想到这一点; 我猜是因为我来自Windows,其中'和'的表现略有不同.
关于安全性,我理解这个问题,但是,在这种情况下,我对os.system()提供的快速简单的解决方案感兴趣,并且字符串的来源要么不是用户生成的,要么至少是由用户输入的.可信用户(我).
如何打印字符串的转义表示,例如,如果我有:
s = "String:\tA"
Run Code Online (Sandbox Code Playgroud)
我希望输出:
String:\tA
Run Code Online (Sandbox Code Playgroud)
在屏幕上而不是
String: A
Run Code Online (Sandbox Code Playgroud)
java中的等效函数是:
String xy = org.apache.commons.lang.StringEscapeUtils.escapeJava(yourString);
System.out.println(xy);
Run Code Online (Sandbox Code Playgroud)
假设我在Python 3.2中有一个字符串,如下所示:
'\n'
Run Code Online (Sandbox Code Playgroud)
当我将它打印到控制台时,显然它显示为一个新行.我想要的是能够打印它作为反斜杠后跟一个n.此外,我需要为所有转义字符执行此操作,例如\ t.所以我正在寻找一个函数unescape(),对于一般情况,它将按如下方式工作:
>>> s = '\n\t'
>>> print(unescape(s))
'\\n\\t'
Run Code Online (Sandbox Code Playgroud)
这可能在Python中没有构建转义字符的字典到它们的字面替换吗?
(如果有人感兴趣,我这样做的原因是因为我需要在命令行上将字符串传递给外部程序.该程序了解所有标准转义序列.)
我有一个问题,有没有办法“强制”repr()在字符串周围创建始终单引号?
当我只使用时会发生这种情况 repr()
print repr("test")
'test'
print repr("test'")
"test'"
print repr("test\"")
'test"'
print repr("test'\"")
'test\'"'
Run Code Online (Sandbox Code Playgroud)
所以最后一个实际上是我想要的,但我不想总是添加\\"以获得单引号。
编辑:我不会将答案标记为已接受,因为正如@martijn-pieters 所指出的那样,我将其repr()用于不适合的目的。
此示例代码打印文件中一行的表示.它允许'\n'在一行中查看其内容,包括控制字符,因此我们将其称为行的"原始"输出.
print("%r" % (self.f.readline()))
Run Code Online (Sandbox Code Playgroud)
但是,输出显示的'是每个末尾添加的字符不在文件中.
'line of content\n'
如何摆脱输出周围的单引号?
(Python 2.7和3.6中的行为相同.)
我正在尝试创建一个Python脚本,然后运行shell脚本"js2coffee"将一些javascript转换为coffeescript.
从命令行我可以运行它,并再次获得coffeescript ...
echo "var myNumber = 100;" | js2coffee
我需要做的是使用Python中的相同模式.
在Python中,我来到这样的事情:
command = "echo '" + myJavscript + "' | js2coffee"
result = os.popen(command).read()
Run Code Online (Sandbox Code Playgroud)
这有时会起作用,但是有些问题与特殊字符(我认为大多数是引号)没有被正确转义myJavascript.必须有一种标准的方法来做到这一点.有任何想法吗?谢谢!
如何将"\"字符串添加到字符串中?
例如,如果我有"testme",我做
"testme"+"\"
Run Code Online (Sandbox Code Playgroud)
我会收到一个错误.
"\"在字符串中每个paren之前添加a的"pythonic"方法是什么?
比如来自 "(hi)" to "\(hi\)"
我目前的方法是迭代每个字符并尝试追加一个"\"我觉得不是"pythonic"的字符串