如何将符号放入列表中

时间:2018-02-13 04:24:43

标签: python python-3.x

如何将\,/,:,*,?,“,<,>,|等符号放入列表中?

如果我这样做:

class ABC extends React.Component{
   constructor(){
      super();
      this.a = 10;
      this.b = 20;
   }

   render(){ 
      console.log(this.a, this.b);
      return (....);
   }
}

分隔项目的逗号将被计为包含illegalchar = ['\', '/' ,':' ,'*', '?', '"', '<', '>', '|']

的字符串

PS:检查文件名是否包含非法字符(不能制作成文件),如果有其他方法,请告诉我,谢谢!

4 个答案:

答案 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 = ['\\', '/' ,':' ,'*', '?', '"', '<', '>', '|']