4

誰かがもっとPythonのような、もっと美しい解決策を見つけることができますか?

ファイル内のいくつかのテキスト行をループして、それらが特定の基準を満たしているかどうかを確認しています。何らかの理由で、行の内部の区切り文字は''、つまりダブルスペースであると決定されました。

テキスト文字列をチェックして、すべての区切り文字が正確に2つのスペースであることを確認するにはどうすればよいですか?行は最初に.strip()されているため、行の終わりのスペースは問題になりません。

私はこれを書きました、そしてそれは働きます–しかし、それは醜いです。コードは一部の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。この場合、セパレーター' '(2つのスペース)を使用して文字列を再結合し、それをストリップされたバージョンと比較します(ストリップが何をするかはすでに知っていると思います)。

**これにより、文字列の先頭と末尾の空白が無視されます。

于 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

そしてもう1つ簡単なアプローチ:

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)

注:例のように、改行の前に2つのスペースを続けることはできません。

于 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 に答える