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