Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python如果字符串中存在子字符串,则在relimiter之间获取其上下文_Python_Regex_Search_Find - Fatal编程技术网

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