我能让正则表达式否定lookbehind断言应用于整个表达式吗?

2024-10-01 17:21:16 发布

您现在位置:Python中文网/ 问答频道 /正文

{!{tomake-all-case1>使用一个正则表达式(

以下是我所拥有的:

(?<![!])([A-Z]?[a-z]+[A-Z][a-zA-Z]+)

否定的lookbehind断言只应用于第一个[A-Z]块,而不是像我预期的那样应用于括号内的所有内容。有没有必要应用否定的lookbehind断言,以便它像我预期的那样在整个组中起作用?在

如果不可能的话。有人对我能做什么有什么建议吗?在

我需要匹配(并最终替换)所有驼色大小写的单词。我定义Camel Cased的方法如下:

  1. 以一个大写字母或小写字母开头的单词
  2. 一个或多个小写字母
  3. 大写字母
  4. 一个或多个小写字母

换言之,任何以开头的单词,只有一个大写字母后接一个或多个小写字母,后跟一个或多个小写字母。在

所有这些很容易匹配,当我需要检查它是否以感叹号(!)开头时,问题就变得明显了。目标是找到所有不以该符号开头的单词。在

示例:

  • 正则表达式应匹配:HelloWorld
  • 正则表达式不应匹配:!HelloWorld

用这样一句话:“欢迎来到我的世界!我们有!这里很酷!” 我应该可以提取我的世界,但不是很酷的东西

谢谢你的帮助, -尚佳03

[编辑:]以下是一个字符串,它不起作用:

^{pr2}$

正则表达式将提取以下内容:

['elloWorld', 'iPods']

解决方案:(?<![!])\b([A-Z]?[a-z]+[A-Z][a-zA-Z]+)

感谢JBernardo的提示。这个解决方案之所以有效,是因为它查找除感叹号之外的任何单词边界。在


Tags: 内容世界断言大写字母all解决方案单词helloworld
2条回答
re.findall(r'(?<![!])\b\w+', ' !Hai  Yo!')

结果是['Yo']

顺便说一句,只要用您的验证更改\w+,但保留{}。在

看起来下面的东西能满足你的要求

>>> reg=r'[^!]\b([a-zA-Z][a-z]+[A-Z][a-zA-Z]+)\b'
>>> text="Welcome to MyWorld! We have !CoolStuff here YouAgree?"
>>> re.findall(reg, text)
['MyWorld', 'YouAgree']
>>> 

相关问题 更多 >

    热门问题