Python如果字符串中存在子字符串,请在relimiters之间获取其上下文

问题描述 投票:-3回答:1

我有一个遵循模式的字符串列表,这样在字符串中的某个位置可能有一个子字符串RAM。例如:

sdfjhsk_sdkjfhs_RAM_lkfdgjls

有时这个字符串后面可能有另一个字符。例如:

aaaa_RAMA_sfsffgd

我需要在最近的下划线之间有整个上下文,所以RAM在第一种情况下,RAMA在第二种情况下。

它甚至可能在字符串ex中根本不存在:

sfdks_sdfsdf_sdfsdf_sdfsdfsdf

允许在字符串的开头或结尾处匹配:

RAMsdoa_saeorfioa_noutd  -> RAMsdoa
aetu_eaei_sdsdf_RAMSdoa  -> RAMsdoa

在没有下划线的字符串中匹配:

sdasids -> nothing
sdfRAMso -> sdfRAMso

搜索字符串的最佳方法是什么,如果它包含模式RAM,如果是,请抓住最近的分隔符_(或字符串的开头或结尾,如果更近)之间的所有内容?

python regex search find
1个回答
1
投票

您可以在此处使用正则表达式。您需要匹配RAM,以及之前和之后的任何非_字符:

import re

def find_ram_context(inputtext):
    match = re.search(r'[^_]*RAM[^_]*', inputtext)
    if match:
        return match.group(0)

[^...]是一个负面的字符集匹配;任何不在该集合中的东西都会匹配。这里是_,而*意味着应该有零个或多个这样的字符。因此,RAM之前或之后的任何不是下划线的字符都将被拉入匹配的文本中。

上面的函数返回匹配的上下文,如果单词None不存在,则返回RAM

>>> find_ram_context('sdfjhsk_sdkjfhs_RAM_lkfdgjls')
'RAM'
>>> find_ram_context('aaaa_RAMA_sfsffgd')
'RAMA'
>>> find_ram_context('sfdks_sdfsdf_sdfsdf_sdfsdfsdf') is None
True

https://regex101.com/r/6VcLrC/1上使用您的测试用例进行正则表达式的在线演示

© www.soinside.com 2019 - 2024. All rights reserved.