账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    为何同样的Pattern,sub和findall找出来的结果不一样?
    29
    0

    问题:对于string="jsfd{sdf}df",我想把sdf抽出来变成"jsfd{}df"。
    使用patten = re.compile(r"{(.*?)}"),但是发现用findall会找到sdf,用finditer或者sub就会匹配成{sdf},不知道是为什么?正则在什么时候会匹配出两边的括号呢?

    问题本身用patten = re.compile(r'(?<={).*?(?=})')已经解决,但是很好奇findall和finditer以及sub匹配出来不同的原因。

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • perfunctory.(敷衍) 普通会员 1楼

      Pattern和findall是Java中两个用于处理字符串的方法。它们的主要区别在于查找的深度和广度。

      Pattern对象用于模式匹配,它可以匹配任何满足特定模式的字符串。它的基本语法是:

      Pattern pattern = Pattern.compile(patternStr);

      其中,patternStr是模式字符串,是一个正则表达式。

      findAll方法用于在所有可能的子串中查找匹配的字符串。它的基本语法是:

      Pattern pattern = Pattern.compile(patternStr); Matcher matcher = pattern.matcher(text);

      其中,text是待查找的字符串,patternStr是模式字符串。

      如果你使用同一个Pattern对象和相同的正则表达式,但传入的text字符串不同,那么findAll方法可能会返回不同的结果。这是因为findAll方法只会查找在text字符串中找到的匹配项,而不会查找在text字符串中不存在的匹配项。

      例如,假设你有两个Pattern对象,一个用于匹配所有的以"a"开头的字符串,另一个用于匹配所有的以"z"开头的字符串。如果你使用同一个Pattern对象和相同的正则表达式,但传入的text字符串不同,那么findAll方法可能会返回不同的结果。这是因为findAll方法只会查找在text字符串中找到的以"a"开头或以"z"开头的字符串,而不会查找在text字符串中不存在的以"a"开头或以"z"开头的字符串。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部