Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查Python中字符多次出现的字符串_Python_String_Parsing - Fatal编程技术网

检查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