如何将\,/,:,*,?,“,<,>,|等符号放入列表中?
如果我这样做:
class ABC extends React.Component{
constructor(){
super();
this.a = 10;
this.b = 20;
}
render(){
console.log(this.a, this.b);
return (....);
}
}
分隔项目的逗号将被计为包含illegalchar = ['\', '/' ,':' ,'*', '?', '"', '<', '>', '|']
PS:检查文件名是否包含非法字符(不能制作成文件),如果有其他方法,请告诉我,谢谢!
答案 0 :(得分:1)
在将字符串插入数组之前,您需要在字符串中转义\
之类的特殊字符,如下所示:
In [2]: something = ["\\", "/"]
In [3]: something
Out[3]: ['\\', '\/']
打印它将为您提供转义反斜杠
In [12]: something = ["\\", "/"]
In [13]: something
Out[13]: ['\\', '/']
In [14]: print ', '.join(something)
\, /
答案 1 :(得分:1)
使用原始字符串(表示在字符串前放置r
)。然后,将原始字符串转换为列表:
illegals = [i for i in r'\/:*?"<>|']
# OR, using @abccd's suggestion, just use list()
illegals = list(r'\/:*?"<>|')
illegals
# ['\\', '/', ':', '*', '?', '"', '<', '>', '|']
注意打印时'\\'
仍然是一个反斜杠,但是在值中,第一个反斜杠存储为转义字符。
您可以在documentation of lexical analysis.
上阅读更多内容这回答了这个问题,但实际上你string
被视为list
个字符,所以以下两个都会返回相同的元素:
[i for i in list(r'\/:*?"<>|')]
[c for c in r'\/:*?"<>|']
至于如何识别文件名是否包含任何这些字符,您可以这样做:
valid_file = 'valid_script.py'
invalid_file = 'invalid?script.py'
validate = lambda f: not any(c for c in r'\/:*?"<>|' if c in f)
validate(valid_file)
# True
validate(invalid_file)
# False
这只是众多方式中的一种。您甚至可以选择正则表达式方法:
import re
# Note in regex you still need to escape the slash and backslash in the match group
validate = lambda f: not re.search(r'[\\\/:*?\"<>|]+', f)
validate(valid_file)
# True
validate(invalid_file)
# False
答案 2 :(得分:1)
如果这个想法只是为了检查非法字符,那么你在这里使用复杂的东西做得太过分了。 python string
允许查找,因为它们也是迭代器。我会采用以下简单方法:
In [5]: illegalchar = '\/:*?"<>|'
In [6]: if "/" in illegalchar:
print("nay")
...:
nay
缺点:必须跳过一种类型的quote
,其中环绕字符串(在这种情况下为'
)
答案 3 :(得分:1)
只需在反斜杠\
之前添加转义字符\
。
更改
illegalchar = ['\', '/' ,':' ,'*', '?', '"', '<', '>', '|']
到
illegalchar = ['\\', '/' ,':' ,'*', '?', '"', '<', '>', '|']