【问题标题】:Python - Test if string is before another stringPython - 测试字符串是否在另一个字符串之前
【发布时间】:2022-01-14 07:19:28
【问题描述】:

文件内容:

abc 
Swan
abc2
Swan
abc3

...如何测试“Swan”是否存在,但仅在“abc2”之前(在 Python 中)

(第一次发帖,望见谅

【问题讨论】:

  • 您遇到了哪些问题?读取文件?在线路上循环?检查一条线是否具有特定值?如果找到某个值就停止循环?请分享您的代码并解释您到底遇到了什么问题。
  • 欢迎来到 Stack Overflow。您是否编写了一次查看文件一行的代码?您是否尝试检查当前行是否为“Swan”,然后检查下一行是否为“abc2”?你觉得这有什么特别困难的地方?

标签: python string


【解决方案1】:

可以使用这个:

txt = '''
abc 
Swan
abc2
Swan
abc3
'''

import re

if re.search(r'Swan\nabc2', txt, re.M):
    print('True')

这将查看文本Swan 中的某处是否存在并且其后面的某处(不是直接)应该有 abc2。

如果您正在查看每一行,则可以循环遍历这些行:

lst_txt = txt.split('\n')
for line, lineafter in zip(lst_txt[:-1], lst_txt[1:]):
    if line == 'Swan' and lineafter == 'abc2':
        print('True')

【讨论】:

    【解决方案2】:

    如果您将文件中的数据作为字符串保存,则可以将其拆分为行,如果是行中,则只需将其转换为所有行的列表。然后,您可以使用 list.index() 查找值出现在哪一行并将其与其他值进行比较,如下所示:

    testStr = """abc 
    Swan
    abc2
    Swan
    abc3"""
    
    lines = testStr.splitlines()
    
    print(lines.index('Swan'))
    print(lines.index('abc2'))
    if lines.index('Swan') < lines.index('abc2'):
        print('Swan comes before abc2')
    

    哪些输出:

    1
    2
    Swan comes before abc2
    

    【讨论】:

      【解决方案3】:

      如果文件是txt文件,可以这样。 例如)文件名:content.txt

      with open('content.txt', 'r') as f:
          r = f.readlines()
          for i, val in enumerate(r):
              word = val.replace('\n', '')
              if val == 'Swan':
                  print('Position of Swan :', i)
              elif val == 'abc2':
                  print('Position of abc2 :', i)
                  break
      

      【讨论】:

        【解决方案4】:

        x_before_y 遍历一个可迭代对象(例如一个列表)并在找到出现在字符串 y 之前的字符串 x 时立即返回 True

        def x_before_y(x, y, iterable):
            for i, el in enumerate(iterable):
                if el == y and iterable[i-1] == x:
                    return True
            return False
        
        lines = ["x", "Swan", "abc2", "x", "Swan"]
        x_before_y("Swan", "abc2", lines) #  True
        x_before_y("abc2", "Swan", lines) #  False
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-09-06
          • 2011-12-16
          • 1970-01-01
          • 1970-01-01
          • 2015-09-16
          • 2015-06-18
          • 2012-08-12
          相关资源
          最近更新 更多