Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.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-Regex(Re.Escape,Re.Findall);如何:查找子字符串+;字符串中子字符串之外的字符数?_Python_Regex_String_Parsing_Findall - Fatal编程技术网

Python-Regex(Re.Escape,Re.Findall);如何:查找子字符串+;字符串中子字符串之外的字符数?

Python-Regex(Re.Escape,Re.Findall);如何:查找子字符串+;字符串中子字符串之外的字符数?,python,regex,string,parsing,findall,Python,Regex,String,Parsing,Findall,这可能是一个简单的问题。我正在学习如何使用正则表达式,在字符串上执行特定任务时遇到了困难 例如: 示例_string=“;一,一;二,二;三,三;四,四” 所需的#u输出=[“一,o”,“二,t”,“三,t”,“四,f”]#列表输出正常 通过以下步骤,我可以得到[“一”、“二”、“三”]: 但是我很难弄清楚如何正确地配置它来获取逗号+空格+任何我想要的字符类型 有什么建议吗 谢谢 您可以设置完整模式(从分号到逗号后的第二个字母),并标记要提取的组: >>> s = "; On

这可能是一个简单的问题。我正在学习如何使用正则表达式,在字符串上执行特定任务时遇到了困难

例如:

示例_string=“;一,一;二,二;三,三;四,四”

所需的#u输出=[“一,o”,“二,t”,“三,t”,“四,f”]#列表输出正常

通过以下步骤,我可以得到[“一”、“二”、“三”]:

但是我很难弄清楚如何正确地配置它来获取逗号+空格+任何我想要的字符类型

有什么建议吗


谢谢

您可以设置完整模式(从分号到逗号后的第二个字母),并标记要提取的组:

>>> s =  "; One, one; Two, two; Three, three; Four, four"
>>> re.findall(r"; (.*?,.{2})", s)
['One, o', 'Two, t', 'Three, t', 'Four, f']
这里有一个解决方案:

example_string = "; One, one; Two, two; Three, three; Four, four"
def findStringsInMiddle(text): 
    return re.findall("; (.+?, [a-z])",text)

desired_output = findStringsInMiddle(example_string)
desired_output
输出:

['One, o', 'Two, t', 'Three, t', 'Four, f']
['One, o', 'Two, t', 'Three, t', 'Four, f']

您可以通过包含右侧分隔符并附加可选的
(?:\s*)
组来稍微重新组织模式:

def findStringsInMiddle(a, b, text): 
    return re.findall(re.escape(a)+"(.*?"+re.escape(b) + r"(?:\s*.)?)",text, flags=re.S)
该模式看起来像
;(.*,(?:\s*)
(请参阅)并将匹配:

  • -左侧分隔符
  • (*,(?:\s*)
    -第1组:
    • *?
      -任何零个或多个字符,尽可能少
  • -逗号
  • (?:\s*)
    -一个可选的非捕获组,匹配1次或0次出现的0+空格,然后是任何字符
注:我添加了
re.S
标志,使
也匹配换行符

见:

输出:

['One, o', 'Two, t', 'Three, t', 'Four, f']
['One, o', 'Two, t', 'Three, t', 'Four, f']

谢谢大家的回答。每个人的解决方案实际上都是有效的,所以我必须将我选择的解决方案建立在其他指标的基础上。Wiktor的回答配置了我的实际功能,这是我特别要求的,他是第一个这样做的人。不管怎样,下面所有的答案都很好:很抱歉,我不能全部选择!
['One, o', 'Two, t', 'Three, t', 'Four, f']