4

任何人都可以找到更 Python 的、更漂亮的解决方案吗?

我正在遍历文件中的一些文本行,以检查它们是否符合某些条件。由于某种原因,决定行内部的分隔符是' ',即双倍空格。

如何检查文本字符串以验证所有分隔符都是两个空格?行尾的空格不是问题,因为该行最初是 .strip()'ed。

我写了这个,它有效——但它很丑。代码会展示给一些 Python 新手,所以我正在寻找更短、更清晰、更美观的解决方案……</p>

ll = ["53.80  64-66-04.630N  52-16-15.355W 25-JUN-1993:16:48:34.00  S10293..  2",
      " 53.80  64-66-04.630N  52-16-15.355W  25-JUN-1993:16:48:34.00  S10293..  2",
      "53.80  64-66-04.630N  52-16-15.355W  25-JUN-1993:16:48:34.00  S10293..  2",
      "  53.80  64-66-04.630N  52-16-15.355W  25-JUN-1993:16:48:34.00  S10293..  2",
      "53.80  64-66-04.630N  52-16-15.355W  25-JUN-1993:16:48:34.00  S10293..  2 ",
      "53.80  64-66-04.630N  52-16-15.355W  25-JUN-1993:16:48:34.00  S10293..  2  ",
      "53.80  64-66-04.630N  52-16-15.355W   25-JUN-1993:16:48:34.00  S10293..  2"]

for ln in ll:
    l = ln.strip()
    bolDS = True
    for n in range(len(l)-1):
        if (n>0 and l[n]==' ' and not ((l[n]==l[n+1])^(l[n]==l[n-1]))):
            bolDS = False

    print "|"+l+"|",bolDS
4

4 回答 4

10
def is_doublespace_separated(input_string):
    return '  '.join(input_string.split()) == input_string.strip()

这有效,因为string.split会将您的字符串拆分为任何空格。并string.join用分隔符加入列表string。在这种情况下,我们使用分隔符' '(两个空格)重新加入您的字符串,然后将其与剥离后的版本进行比较(我感觉您已经知道 strip 的作用)。

**这将忽略字符串前面和结尾的空格。

于 2012-06-26T18:53:36.140 回答
4

这是一个快速的解决方案:

import re

s = "53.80  64-66-04.630N  52-16-15.355W 25-JUN-1993:16:48:34.00  S10293..  2"
s2 = "53.80  64-66-04.630N  52-16-15.355W  25-JUN-1993:16:48:34.00  S10293..  2"

def spaceTest(line):
    matches = re.findall(r'\s+', line.strip())
    return not any(m for m in matches if m != '  ')

print spaceTest(s)
# False
print spaceTest(s2)
# True

还有一种更简单的方法:

s.strip().count('  ')+1 == len(s.split())

这假设分隔符的数量应该比字段的数量少 1。

于 2012-06-26T18:58:36.153 回答
0

要验证一行是否只有双空格,您可以使用正则表达式(尽管@mgilson 的拆分/连接解决方​​案可能既简单又高效):

import re

ok = re.match(r'(?:\S|(?<!\s)  (?!\s))*$', line)

注意:它不允许在换行符之前尾随双空格,例如.

于 2012-06-26T19:53:16.050 回答
-3
ll = ["53.80  64-66-04.630N  52-16-15.355W 25-JUN-1993:16:48:34.00  S10293..  2",
      " 53.80  64-66-04.630N  52-16-15.355W  25-JUN-1993:16:48:34.00  S10293..  2",
      "53.80  64-66-04.630N  52-16-15.355W  25-JUN-1993:16:48:34.00  S10293..  2",
      "  53.80  64-66-04.630N  52-16-15.355W  25-JUN-1993:16:48:34.00  S10293..  2",
      "53.80  64-66-04.630N  52-16-15.355W  25-JUN-1993:16:48:34.00  S10293..  2 ",
      "53.80  64-66-04.630N  52-16-15.355W  25-JUN-1993:16:48:34.00  S10293..  2  ",
      "53.80  64-66-04.630N  52-16-15.355W   25-JUN-1993:16:48:34.00  S10293..  2"]

doubleSpace=ll.find("  ") #this code searches for double space.

print(doubleSpace)  
于 2021-01-31T17:20:46.493 回答