Python如果字符串中存在子字符串,则在relimiter之间获取其上下文
我有一个遵循某种模式的字符串列表,在字符串的某个位置可能有一个子字符串Python如果字符串中存在子字符串,则在relimiter之间获取其上下文,python,regex,search,find,Python,Regex,Search,Find,我有一个遵循某种模式的字符串列表,在字符串的某个位置可能有一个子字符串RAM。 例: 有时此字符串后面可能有另一个字符。 例: 我需要将整个上下文放在最接近的下划线之间,因此第一种情况是RAM,第二种情况是RAMA 它甚至可能根本不存在于字符串中 例: 允许在字符串的开头或结尾进行匹配: RAMsdoa_saeorfioa_noutd -> RAMsdoa aetu_eaei_sdsdf_RAMSdoa -> RAMsdoa 与不带下划线的字符串中的匹配一样: sdasids
RAM
。
例:
有时此字符串后面可能有另一个字符。
例:
我需要将整个上下文放在最接近的下划线之间,因此第一种情况是RAM
,第二种情况是RAMA
它甚至可能根本不存在于字符串中
例:
允许在字符串的开头或结尾进行匹配:
RAMsdoa_saeorfioa_noutd -> RAMsdoa
aetu_eaei_sdsdf_RAMSdoa -> RAMsdoa
与不带下划线的字符串中的匹配一样:
sdasids -> nothing
sdfRAMso -> sdfRAMso
搜索字符串的最佳方法是什么?如果它包含模式
RAM
,如果包含模式,则抓取最近分隔符\u
之间的所有内容(或者字符串的开头或结尾,如果更近)?您可以在此处使用正则表达式。您需要匹配RAM
,以及以下前后的任何非字符:
import re
def find_ram_context(inputtext):
match = re.search(r'[^_]*RAM[^_]*', inputtext)
if match:
return match.group(0)
[^…]
是负数字符集匹配;任何不在那一组的东西都会匹配。这里是。
,而*
意味着应该有零个或更多这样的字符。因此,在RAM
之前或之后不是下划线的任何字符都将被拉入匹配的文本中
上述函数返回匹配的上下文,如果单词RAM
不存在,则返回None
:
>>> 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
regex的在线演示,测试用例位于什么是“最佳”取决于许多因素,其中一些因素您显然没有透露。您尝试过什么,是太慢还是太不灵活?第一个字符串的期望输出是什么?因为有三个下划线。
。我很想听听我的答案有哪些没有帮助或错误,值得投反对票。这样我可以改进我的答案!
sdasids -> nothing
sdfRAMso -> sdfRAMso
import re
def find_ram_context(inputtext):
match = re.search(r'[^_]*RAM[^_]*', inputtext)
if match:
return match.group(0)
>>> 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