如何计算任意两个字母字符之间的破折号?


10

如果我们有一串字母字符和一些破折号,并且我们要计算该字符串中任意两个字母字符之间的破折号数。最简单的方法是什么?

例:

输入: a--bc---d-k

输出: 2031

这意味着a和b之间有2个破折号,b和c之间有0破折号,c和d之间有3个破折号,而d和k之间有1个破折号

在python中找到此输出列表的好方法是什么?


3
您可以简单地使用for循环进行尝试。
崔宝城

1
@BoseongChoi是的,我肯定尝试过循环,但是我感到困惑,请您解释更多吗?
Not_Found

@ Ch3steR我认为我们没有这样的输入。
Not_Found

2
那么两者a-b-ca-----------b将成为相同的输出11
堆溢出

这些是连字符,而不是破折号。
TRiG

Answers:


9

正则表达式的解决方案:

import re

x = 'a--bc---d-k'

results = [
    len(m) for m in
    re.findall('(?<=[a-z])-*(?=[a-z])', x)
]
print(results)
print(''.join(str(r) for r in results))

输出:

[2, 0, 3, 1]
2031

具有蛮力循环逻辑的解决方案:

x = 'a--bc---d-k'

count = 0
results = []
for c in x:
    if c == '-':
        count += 1
    else:
        results.append(count)
        count = 0
results = results[1:]  # cut off first length
print(results)

输出:

[2, 0, 3, 1]

我假设f模式前面的是错字?您无需创建没有反斜杠的原始字符串。也不需要捕获组=)。通过好答案
JvdV

1
@JvdV好的f,谢谢。我使用的是f-string,但是在改善答案的同时我放下了那一部分,但是却忘了删除f。我更新了答案。也不需要捕获小组吧:)
崔宝城

1
@Tim号count仅在遇到results时附加c != '-'。如果x以结尾-,则last count将被忽略。
崔宝城

11

您可以使用一个非常简单的解决方案,如下所示:

import re

s = 'a--bc---d-k'
# Create a list of dash strings.
dashes = re.split('[a-z]', s)[1:-1]
# Measure the length of each dash string in the list and join as a string.
results = ''.join([str(len(i)) for i in dashes])

输出:

'2031'


2

如果您输入的内容也可以以破折号开头,则可以使用以下命令:

def count_dashes(string):
    all_counts = []
    dash_count = 0
    for char in string:
        if char == "-":
            dash_count += 1
        else:
            all_counts.append(dash_count)
            dash_count = 0
    return all_counts

但是,如果您输入的内容始终以字母开头,那么您可能不喜欢始终位于列表开头的0。

如果您需要将输出作为整数字符串,则可以添加以下内容:

def count_dashes(string):
    all_counts = []
    dash_count = 0
    for char in string:
        if char == "-":
            dash_count += 1
        else:
            all_counts.append(dash_count)
            dash_count = 0
    return "".join([str(number) for number in all_counts])

1

这是一个简单的循环方法:

myinput = 'a--bc---d-k'
output = []
output_count = -1
for elem in myinput:
  if elem == '-':
    output[output_count] = output[output_count]+1
  else:
    output.append(0)
    output_count += 1

print(output)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.