2

完成该解决方案,以便去除传入的任何一组注释标记之后的所有文本。还应去除行尾的任何空格。示例:给定一个输入字符串:

apples, pears # and bananas
grapes
bananas !apples

预期的输出将是:

apples, pears
grapes
bananas

我的功能:

    import regex
    
    def solution(string,markers):
    
        i = regex.sub('{}.*|\s*{}.*'.format(*markers),'',string)
    
        return i

1)solution("apples, pears # and bananas\ngrapes\nbananas !apples", ["#", "!"])

理想结果: “apples, pears\ngrapes\nbananas”

实际结果: 'apples, pears \ngrapes\nbananas'错误:'pears' 后面有一个空格

2)solution("a #b\nc\nd $e f g", ["#", "$"])

理想结果: “'a\nc\nd”

实际结果: 'a \nc\nd $ef g' 错误:'a' 和 '(space)$ef g' 后面不应该有空格

4

1 回答 1

0

建议的解决方案:

  1. 使用简单re。在这种情况下,它拥有您所需要的一切,
  2. 你不需要(whatever)|\s*(whatever)。第一种选择是多余的,
  3. 用于(marker1|marker2|...|markern)由 组成的注释标记"|".join*()。为什么不是字符类?因为评论标记可以包含多个字符,即//
  4. re.escape()使用,转义正则表达式的注释标记
  5. 使用$带有标志的断言re.M来到达注释字符串的末尾。

蟒蛇 3:

import re
def solution(string: str, markers: list) -> str:
    return re.sub('\s*(' + '|'.join(map(lambda str: re.escape(str), markers)) + ').*$', '', string, 0, re.M)

# Test:
print (solution('apples, pears # and bananas\ngrapes\nbananas !apples', ['#', '!']))
print (solution('a #b\nc\nd $e f g', ['#', '$']))
于 2020-11-06T04:50:07.980 回答