正则表达式获取文本BETWEEN两个字符

Eri*_*ham 19 regex

请仔细阅读:这有点不寻常,你会想要说"那不是如何使用正则表达式"或"伙计,只需使用String.SubString(),"等...

我需要编写一个正则表达式(使用预先存在的方法),它将匹配文本BETWEEN花括号,但不是花括号本身.

例如: "{MatchThisText}" "La la la {MatchThisText} la la la ..."
两者都应匹配: "MatchThisText"

一年前有人问过这个确切的问题,除了"MatchThisText"之外,他还得到了一堆正则表达式与大括号相匹配的解决方案,导致匹配"{MatchThisText}",这不是他(或我)需要.

如果有人可以编写一个实际上只匹配花括号之间的字符的正则表达式,我真的很感激.它应该允许任何ASCII值,并应在第一个结束括号停止匹配.

例如: "{retailCategoryUrl}/{filters}"
应匹配: retailCategoryUrl和过滤器
但不匹配: "retailCategoryUrl}/{filters"(除了外部大括号外)

嘿,这对我来说真的很棘手,所以请原谅这个问题,如果对你们这些人来说这是微不足道的.

谢谢!

Dou*_*der 17

蟒蛇:

(?<={)[^}]*(?=})
Run Code Online (Sandbox Code Playgroud)

在上下文中:

#!/usr/bin/env python

import re

def f(regexStr,target):
    mo = re.search(regexStr,target)
    if not mo:
        print "NO MATCH"
    else:
        print "MATCH:",mo.group()

f(r"(?<={)[^}]*(?=})","{MatchThisText}")
f(r"(?<={)[^}]*(?=})","La la la {MatchThisText} la la la...")
Run Code Online (Sandbox Code Playgroud)

打印:

MATCH: MatchThisText
MATCH: MatchThisText
Run Code Online (Sandbox Code Playgroud)


Dan*_*del 12

如果您使用的是RegExp引擎,它具有像Python一样的先行和后观支持,那么您可以使用

/(?<={)[^}]*(?=})/

如果没有(比如javascript),你可以使用/{([^}]*)}/并获得子串匹配.Javascript示例:

"{foo}".match(/{([^}]*)}/)[1] // => 'foo'


ste*_*nar 8

你需要一个非贪婪的匹配算子,*?一旦发动机看到一个闭合的冰壶支撑就停止比赛.然后你需要使用括号对括号内的内容进行分组.这应该这样做:

{(.*?)}
Run Code Online (Sandbox Code Playgroud)

然后,您需要从groupregex API中获取数字1 的值.(如何执行此操作取决于您的编程语言/ API.)