【问题标题】:How to check that a comma-separated string in Python contains only single commas?如何检查 Python 中逗号分隔的字符串是否只包含单个逗号?
【发布时间】:2020-09-05 23:40:01
【问题描述】:

我正在尝试检查 python 中逗号分隔字符串的有效性。也就是说,字符串可能包含使用多个逗号的错误。

这是一个有效的字符串:

foo = "a, b, c, d, e"

这是一个有效的字符串,因为它是逗号分隔的;只有一个逗号,而不是几个或只有空格。

这是一个无效的字符串:

invalid = "a,, b, c,,,,d, e,,; f, g"

无效字符串是无效的,因为 (1) 它使用了多个逗号,并且 (2) 它还使用了分号 ;

检查字符串是否有效的最有效方法是什么?

我的第一次尝试是尝试类似:

def check_valid_string(input_string):
    if ",," in input_string or ";" in input_string:
        return "Not valid" ## or False
    else:
        return "Valid" ## or True

但是,尚不清楚这是否会捕获所有可能的无效字符串。我也不清楚这种方法是计算效率最高的(即快速)。

【问题讨论】:

  • 请发布给您带来麻烦的代码。在您发帖寻求帮助之前,我们希望进行一次有效的尝试。 “什么是最好的方法?”通常是围绕“给我代码/设计来解决这个问题”的包装——这与 Stack Overflow 无关。
  • @Prune 添加了带有编辑的代码,并解释了为什么这让我停下来。谢谢
  • 你的代码不能捕捉所有情况,除非你保证连续的逗号也是连续的。否则,只需a, ,c 就会使您的算法跳闸。我们需要您的有效字符串的规范,而不仅仅是两个示例。其他标点符号呢? 缺少逗号怎么办,例如a b
  • @Prune 你说得对,缺少逗号或, , 之类的情况也是无效的。我将尝试在上面的问题中对此进行编辑。
  • 那么这可能是一个重复的问题,尽管我需要更好地理解这些答案:stackoverflow.com/questions/1396084/…

标签: python string


【解决方案1】:

看来最好的方法是使用正则表达式:

这是一个有效的字符串:

valid = "a, b, c, foo, bar, dog, cat"

这里有各种无效的字符串:

## invalid1 is invalid as it contains multiple , i.e. `,,` and :
invalid1 = "a,, b, c,,,,d, e,,; f, g" 

## invalid2 is invalid as it contains `, ,`
invalid2 = "a b, ,c, d, e"

## invalid3 is invalid as it contains spaces between strings
invalid3 = "a, b, d, elephant, f g"

这里是检查字符串是否有效的正则表达式:

import re
pattern = re.compile(r"^(\w+)(,\s*\w+)*$")

def check_valid(input_string):
    if pattern.match(input_string) == None:
        return "Invalid"
    else:
        return "Valid"

函数如下:

>>> check_valid(invalid)
'Invalid'
>>> check_valid(invalid2)
'Invalid'
>>> check_valid(invalid3)
'Invalid'
>>> check_valid(valid)
'Valid'

【讨论】:

    【解决方案2】:

    这里有一些方法可以检查它是否有效:

    def is_valid(comma_sep_str):
      if ';' in comma_sep_str or ',,' in comma_sep_str:
        return 'Not valid'
      else:
        return 'Valid'
    
    myString1 = "a,, b, c,,,,d, e,,; f, g"
    myString2 = "a, b, c, d, e"
    
    print(is_valid(myString1))
    print(is_valid(myString2))
    

    PS:可能不是最有效的,但它会检查是否有效。请注意,在所有错误的情况下,您总是至少有以下两个之一:“,”或“;”。

    【讨论】:

    • 见上面的讨论
    猜你喜欢
    • 1970-01-01
    • 2018-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 2013-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多