有人能找到更多Python'ic,更漂亮的解决方案吗?
我正在循环浏览文件中的一些文本行,以检查它们是否符合某些条件。 由于某种原因,决定线内部的分隔符是'',即双倍空格。
如何检查文本字符串以验证所有分隔符是否正好是两个空格? 该行末尾的空格不是问题,因为该行最初是.strip()'ed。
我写过这个,它有效 - 但它很难看。 代码将显示给一些Python新手,所以我正在寻找更短,更清晰,更美观的解决方案......
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
答案 0 :(得分:10)
def is_doublespace_separated(input_string):
return ' '.join(input_string.split()) == input_string.strip()
这是有效的,因为string.split
会在任何空格上拆分字符串。和string.join
使用分隔符string
加入列表。在这种情况下,我们使用分隔符' '
(两个空格)重新连接您的字符串,然后将其与剥离版本进行比较(我感觉您已经知道了哪个条带)。
**这将忽略字符串前面和末尾的空格。
答案 1 :(得分: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())
这假设分隔符的数量应少于字段数。
答案 2 :(得分:0)
要验证一行只有双空格,你可以使用正则表达式(但是 @mgilson的拆分/加入解决方案可能更简单,更高效):
import re
ok = re.match(r'(?:\S|(?<!\s) (?!\s))*$', line)
注意:它不允许在换行符example之前尾随双倍空格。
答案 3 :(得分:-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)