【问题标题】:Print only parts of string that matches regular expression Pandas仅打印匹配正则表达式 Pandas 的字符串部分
【发布时间】:2020-06-17 22:28:27
【问题描述】:

我有 400 个包含多行的文件。我想找到特定的行并仅提取/打印其中的一部分。

我想到达线路:

Full seesion name: T27I5E8_S1_N005_V004

仅打印:

S1_V004

我试过了:

for filename in os.listdir(data_directory): 
     with open(data_directory + "/" + filename) as file:
        for line in file:
            if re.search(r'([S][\d])|([V][\d]{3})', line):
                    print(line)

但它会打印出整行。 我也试过了:

  subjID = re.compile(r'([S][\d])|([V][\d]{3})')

for filename in os.listdir(data_directory): 
     with open(data_directory + "/" + filename) as file:
        for line in file:
            print(subjID.findall(line))

但输出看起来像:

  []
[]
[]
[]
[('S1', ''), ('', 'V094')]
[]
[]
[]
[]
[]
[]
[]
[('S1', ''), ('', 'V094')]
[]
[]
[]
[]
[]
[]
[]

【问题讨论】:

  • 它打印由于print(line)而导致的行尝试print( "_".join(re.findall(r'(?<![^_])[SV]\d+(?![^_])', line)) )
  • 只打印S部分,不打印V部分。

标签: python regex pandas extract


【解决方案1】:

你可以使用

for filename in os.listdir(data_directory): 
  with open(data_directory + "/" + filename, 'r') as file:
    for line in file:
      m = re.findall(r'[SV]\d+', line)
      if len(m):
        print("_".join(m))

请参阅 Python demoregex demo。使用re.findall,可以找到所有匹配项,如果是,则结果是由匹配文本组成的_-连接字符串。

模式详情

  • [SV] - SV
  • \d+ - 1 位以上

【讨论】:

  • Stil...它只打印出S部分而不是V部分。
  • @Kuki 那你没有使用我的代码。尝试。如果您确定您使用的是 my 代码,请向我展示您的代码演示。
  • 我复制粘贴了。返回我 400 行 S1/S2。感谢大家的帮助!
  • @Kuki 在问题中添加准确粘贴的代码。顺便说一句,将'r' 阅读模式添加到open
  • @Kuki 然后使用r'[SV]\d+'。那么您的示例字符串是错误的,因为您显示匹配项用_s 括起来,而您的真实数据并非如此。
猜你喜欢
  • 2012-03-24
  • 2023-04-02
  • 1970-01-01
  • 2010-09-15
  • 1970-01-01
  • 2012-11-25
  • 2015-10-25
  • 2013-09-16
相关资源
最近更新 更多