我希望使用正则表达式来查找给定字符串中某个字母的所有示例,但如果该字母出现在一个更大的单词/短语中,则不会。例如:
对于测试字符串:
滞后(a,1)+ 252a +最大值(3a2)/ 5pctrange(a,10)
我想获取字母'a'的所有示例,但不包括出现在以下三个单词中的字母'a':
滞后最大量程
例如,我想使用Regex来获取字母'a'的所有示例,如此处突出显示的:
滞后(a,1)+ 252a+最大值(3a2)/ 5 个转换范围(a,10)
我尝试使用下面的正则表达式,但它总是在我想要的字母'a'后面包含字符 *:
a[^"lag|max|pctrange"]
为了提供一些上下文,我在Python中使用re模块来替换这些'a'示例:
import re
string = "lag(a,1) + 252*a + max(3a*2) / 5*pctrange(a,10)"
words = ["lag", "max", "pctrange"]
replace = "_"
re.sub(f"a[^\"{'|'.join(words)}\"]", replace, string)
这将导致(不需要的)输出:
lag(_1) + 252*_+ max(3_2) / 5*pctrange(_10)
我希望输出如下:
lag(_,1) + 252*_ + max(3_*2) / 5*pctrange(_,10)
编辑:请注意,搜索并不总是针对单个字母,例如,有时我想搜索“aa”而不是“a”,或者“bdg”而不是“a”等。更重要的是,要重点关注要排除的单词列表(例如在上面的例子中,“lag”、“max”和“pctrange”)。我不需要忽略任何其他的东西,除了在这个列表中显示的特定单词。谢谢。
3条答案
按热度按时间b4lqfgs41#
若要防止
a
在与另一个字母相邻时被匹配,请尝试使用负数lookarounds。See this demo at regex101-使用
(?i)
flag进行 * 无大小写 * 匹配:[a-z]
→[a-zA-Z]
a
,请使用verbs(*SKIP)(*F)
尝试PyPI regex。Another demo at regex101或查看位于www.example.com的Python演示tio.run
|
alternation左侧的内容将被跳过,右侧的内容将被匹配。i
ignorecase-flag和\b
word boundaries用于(?:
非捕获组)
中的单词。tzcvj98z2#
我认为你在寻找的是世界的边界:
下面的正则表达式只匹配位于两个世界边界内或后面有数字的a:
https://regex101.com/r/7IfinZ/1
of1yzvn43#
此正则表达式主要用于匹配变量,但排除某些单词:
https://regex101.com/r/zBHPQu/1
在这种情况下,使这个正则表达式工作的是所有量词(“++”),它尽可能多地匹配[a-z]模式。