【问题标题】:Python: compare two strings retain difference from one endPython:比较两个字符串保留一端的差异
【发布时间】:2015-09-10 22:26:15
【问题描述】:

这里是初学者,虽然有些相似,但尚未找到此问题的答案。

如果我有两个字符串:

s1 = 'abcdefghijk'
s2 = 'abcdefghi'

如何获得'jk' 作为输出? 'abcdefghi' 必须先匹配,然后我才能得到差异。

接下来(如果我得到第一个问题的答案,我可能会知道)是如果s2 = 'cdefghi' 并且我仍然希望输出仅为'jk' 而不是'ab''jk' 会怎样。

【问题讨论】:

  • 我认为您的问题没有完全明确。如果字符串有非公共部分应该返回什么,例如"abc""xyz"?到目前为止,您尝试过什么?
  • 'abc' 和 'xyz' 不会返回任何内容。仅当某些匹配时,我才想查看 s1 末尾不在 s2 上的内容。在我正在查看的情况下,s2 要么在与 s1 相同的位置结束,但永远不会比 s1 更长并且在最后走得更远

标签: python string compare substring


【解决方案1】:

你可以在s1中找到s2的第一个索引与find(),即:

def after(s1, s2):
    index = s1.find(s2)
    # return None if s2 is not part of s1
    # or if there are no characters behind s2 in s1
    if index != -1 and index + len(s2) < len(s1):
        return s1[index + len(s2):]
    else:
        return None

s1 = "abcdefghijk"
s2 = "cdefghij"

print(after(s1, s2))

【讨论】:

    【解决方案2】:

    对于第一种情况, case s1 = 'abcdefghijk' s2 = 'abcdefghi' ,下面的也可以。

    >>> set(s1) - set(s2)
    {'j', 'k'}
    >>> ''.join( set(s1) - set(s2))
    'jk'
    

    所以基本上可以对字符串应用集合逻辑,以提取上述字符串的重叠和非重叠部分。

    更多信息...https://docs.python.org/2/library/sets.html

    但对于第二种情况,@user3760780 的建议似乎是最合适的。

    【讨论】:

      【解决方案3】:

      您可以使用字符串方法index 查找子字符串的开头,然后添加子字符串的长度以获得您想要从哪里开始获取额外差异。

      base = 'abcdefghijk'
      sub = 'abcdefghi'
      
      def extra(base, sub):
          start = base.index(sub)
          end = start + len(sub)
          return base[end:]
      
      extra(base, sub)
      

      如果sub 不是子字符串,则会在此处抛出ValueError,在这种情况下你可以选择做你想做的事情。

      编辑:根据您对问题的评论,不返回任何内容 - 我猜你的意思可能是一个空字符串 - 做:

      def diff(base, sub):
          try:
              start = base.index(sub)
              end = start + len(sub)
              return base[end:]
          except ValueError:
              return ''
      

      您在此处使用find 还是index 可能取决于您实际想要使用它的目的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-02-04
        • 2014-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多