检查Python中字符多次出现的字符串
如何检查字符串是否仅由(多个)破折号组成<代码>'-',检查Python中字符多次出现的字符串,python,string,parsing,Python,String,Parsing,如何检查字符串是否仅由(多个)破折号组成'-','-','-'等需要是真的,但例如'-3','foo-->等需要是假的。检查的最佳方法是什么?有很多方法,但我认为最严格的方法是: all(i == '-' for i in '----') 您可以使用内置功能: 或 短的 >>> def check(str): ... return bool ( re.match(r"-+$", str)) 一种方法是使用一套 >>> a = '---' >
'-'
,'-'
等需要是真的
,但例如'-3'
,'foo-->
等需要是假的
。检查的最佳方法是什么?有很多方法,但我认为最严格的方法是:
all(i == '-' for i in '----')
您可以使用内置功能: 或 短的
>>> def check(str):
... return bool ( re.match(r"-+$", str))
一种方法是使用一套
>>> a = '---'
>>> len(set(a)) == 1 and a[0] == '-'
True
>>> a = '-x-'
>>> len(set(a)) == 1 and a[0] == '-'
False
如果集合的长度为1
,则字符串中只有一个不同的字符。现在我们只需要检查这个字符是否是'-'
一种更简单的方法是比较集合
>>> set('----') == set('-')
True
>>> set('--x') == set('-')
False
最明显的方法是:
- 字符串是否等于所有破折号时的字符串:
s=='-'*len(s)
李>
- 字符串包含的破折号是否与其长度相同:
s.count('-')==len(s)
李>
- 字符串的
set
是否只是一个破折号:set==set('-')
李>
- 字符串是否仅与破折号的正则表达式匹配:
re.match(r'^-+$',s)
;及
- 字符串破折号中的字符是:
all(c='-'表示s中的c)
李>
毫无疑问,还有其他选择;就“最佳”而言,您必须定义您的标准。另外,空字符串“
应该产生什么结果?其中所有的非字符都是破折号…计算它们并将其与长度进行比较?它与重复的字符相同,只需将其执行的检查更改为所需的任何字符,例如“-”
。正如你所看到的,这里的所有答案都与dupe Thread相同,谢谢。但是,链接中的代码返回此列表['-'、'-'、'-'、'-'、'asd-'、'--asd'、''']
True、True、True、False、False、True
,而不是所需的True、True、True、False、False
,我不太清楚原因——显然是因为如果空字符串,但是我如何解决这个问题呢?您需要将'-'
更改为变量的名称all([])为True
,也就是说,空字符串可能需要特殊处理。您缺少字符串结尾的锚定<代码>检查('-x')
将随代码返回True
。改为使用r“-+$”
。您可以使用返回bool(re.match(“-*$”,s))
(像其他解决方案一样为空字符串返回True)@J.F.Sebastian我不知道这一点。感谢您对s.count('-')==len(s)
的投票,后者看起来相当优雅,甚至适用于空字符串,与“duplicate”中给出的示例不同,后者不是真正的字符串。
>>> a = '---'
>>> len(set(a)) == 1 and a[0] == '-'
True
>>> a = '-x-'
>>> len(set(a)) == 1 and a[0] == '-'
False
>>> set('----') == set('-')
True
>>> set('--x') == set('-')
False