python正则表达式排除包含word的文本
我试图用python中的正则表达式过滤文本。目标是: 检查文本中的单词W前面是否有X或后面是否有Y。 让我们说: W=“天”,X=“可怕”,Y=“光” 我尝试过以下几种方法:python正则表达式排除包含word的文本,python,regex,Python,Regex,我试图用python中的正则表达式过滤文本。目标是: 检查文本中的单词W前面是否有X或后面是否有Y。 让我们说: W=“天”,X=“可怕”,Y=“光” 我尝试过以下几种方法: r".*\b(?!awful\b)day\b.*" r"\W*\b(?!awful\b)day\b.*" => to be able to include \n \r since '.' doesnt r".*\b(day)\b(?!light\b).*" r"\W*\b(day)\b(?!light\b)\W*
r".*\b(?!awful\b)day\b.*"
r"\W*\b(?!awful\b)day\b.*" => to be able to include \n \r since '.' doesnt
r".*\b(day)\b(?!light\b).*"
r"\W*\b(day)\b(?!light\b)\W*" => to be able to include \n \r since '.' doesnt
所以完整的例子是,(如果失败)
还在想怎么做呢!
有什么想法吗?像这样的吗
# ^(?s)((?!X).)*W((?!Y).)*$
^
(?s)
(
(?! X )
.
)*
W
(
(?! Y )
.
)*
$
或者,用单词boundries
# ^(?s)((?!\bX\b).)*\bW\b((?!\bY\b).)*$
^
(?s)
(
(?! \b X \b )
.
)*
\b W \b
(
(?! \b Y \b )
.
)*
$
编辑-不清楚您是否指XWY被空格分隔或任意数量的字符。这个扩展的注释示例显示了两种方式。
祝你好运
注意:
(?添加-删除)
构造是一个修改器组。通常这是一种在正则表达式中嵌入选项,如s(点全部)、i(忽略大小写)等。
其中,
(?s)
表示添加点所有修饰符,(?si)
相同,但也有忽略大小写
# ^(?s)(?!.*(?:\bX\b\s+\bW\b|\bW\b\s+\bY\b))(?:.*\b(W)\b.*|.*)$
# This regex validates W is not preceded by X
# nor followed by Y.
# It also optionally finds W.
# Only fails if its invalid.
# If passed, can check if W present by
# examining capture group 1.
^ # Beginning of string
(?s) # Modifier group, with s = DOT_ALL
(?! # Negative looahead assertion
.* # 0 or more any character (dot-all is set, so we match newlines too)
(?:
\b X \b \s+ \b W \b # Trying to match X, 1 or more whitespaces, then W
| \b W \b \s+ \b Y \b # Or, Trying to match W, 1 or more whitespaces, then Y
# Substitute this to find any interval between X<->W<->Y
# \b X \b .* \b W \b <- Trying to match X, 0 or more any char, then W
# | \b W \b .* \b Y \b <- Or, Trying to match W, 0 or more any char, then Y
)
)
# Still at start of line.
# If here, we didn't find any X<->W, nor W<->Y.
# Opotioinally finds W in group 1.
(?:
.* \b
( W ) # (1), W
\b .*
|
.*
)
$ # End of string
#^(?s)(?!*(?:*\b\s+\bW\b|\bW\b\s+\bY\b))(?:*\b(W)\b.*$
#此正则表达式验证W前面没有X
#后面也没有Y。
#它还可以选择查找W。
#只有在其无效时才会失败。
#如果通过,可以检查W是否由
#检查捕获组1。
^#字符串的开头
(?s)#修饰符组,s=DOT#ALL
(?!#否定断言
任意字符为.#0或更多(设置了点全部,因此我们也匹配换行符)
(?:
\b X\b\s+\b W\b#尝试匹配X,1个或多个空格,然后匹配W
|\b W\b\s+\b Y\b#或者,尝试匹配W,1个或多个空格,然后是Y
#替换此项以查找XWY之间的任何间隔
#\b X\b.*\b W\b类似的东西
# ^(?s)((?!X).)*W((?!Y).)*$
^
(?s)
(
(?! X )
.
)*
W
(
(?! Y )
.
)*
$
或者,用单词boundries
# ^(?s)((?!\bX\b).)*\bW\b((?!\bY\b).)*$
^
(?s)
(
(?! \b X \b )
.
)*
\b W \b
(
(?! \b Y \b )
.
)*
$
编辑-不清楚您是否指XWY被空格分隔
或任意数量的字符。此扩展注释示例显示了两种方式。
祝你好运!
注意:(?add-remove)
构造是一个修改器组。通常是一种
在正则表达式中嵌入选项,如s(点全部)、i(忽略大小写)等。
其中,(?s)
表示添加点所有修饰符,(?si)
相同,但也有忽略大小写
# ^(?s)(?!.*(?:\bX\b\s+\bW\b|\bW\b\s+\bY\b))(?:.*\b(W)\b.*|.*)$
# This regex validates W is not preceded by X
# nor followed by Y.
# It also optionally finds W.
# Only fails if its invalid.
# If passed, can check if W present by
# examining capture group 1.
^ # Beginning of string
(?s) # Modifier group, with s = DOT_ALL
(?! # Negative looahead assertion
.* # 0 or more any character (dot-all is set, so we match newlines too)
(?:
\b X \b \s+ \b W \b # Trying to match X, 1 or more whitespaces, then W
| \b W \b \s+ \b Y \b # Or, Trying to match W, 1 or more whitespaces, then Y
# Substitute this to find any interval between X<->W<->Y
# \b X \b .* \b W \b <- Trying to match X, 0 or more any char, then W
# | \b W \b .* \b Y \b <- Or, Trying to match W, 0 or more any char, then Y
)
)
# Still at start of line.
# If here, we didn't find any X<->W, nor W<->Y.
# Opotioinally finds W in group 1.
(?:
.* \b
( W ) # (1), W
\b .*
|
.*
)
$ # End of string
#^(?s)(?!*(?:*\b\s+\bW\b|\bW\b\s+\bY\b))(?:*\b(W)\b.*$
#此正则表达式验证W前面没有X
#后面也没有Y。
#它还可以选择查找W。
#只有在其无效时才会失败。
#如果通过,可以检查W是否由
#检查捕获组1。
^#字符串的开头
(?s)#修饰符组,s=DOT#ALL
(?!#否定断言
任意字符为.#0或更多(设置了点全部,因此我们也匹配换行符)
(?:
\b X\b\s+\b W\b#尝试匹配X,1个或多个空格,然后匹配W
|\b W\b\s+\b Y\b#或者,尝试匹配W,1个或多个空格,然后是Y
#替换此项以查找XWY之间的任何间隔
#\b X\b.*\b W\b您就快到了。请尝试:
(?<!\bawful\b )\bday\b(?!\s+\blight\b)
(?
演示:
st=''\
“多么美好的一天”=>应该过去了
“美好的一天”=>应该过去了
“糟糕的一天”=>应该失败
“如此糟糕的一天”=>应该失败
“日间照明”=>应失败
“可怕的白昼”=>应该失败
“日间照明”=>应失败“”
W、 X,Y=‘天’、‘糟糕’、‘光’
pat=r'(?你就快到了。试试:
(?<!\bawful\b )\bday\b(?!\s+\blight\b)
(?
演示:
st=''\
“多么美好的一天”=>应该过去了
“美好的一天”=>应该过去了
“糟糕的一天”=>应该失败
“如此糟糕的一天”=>应该失败
“日间照明”=>应失败
“可怕的白昼”=>应该失败
“日间照明”=>应失败“”
W、 X,Y=‘天’、‘糟糕’、‘光’
帕特=r'(?它必须使用正则表达式吗?如果字符串只是daylight
?今天怎么样
?今天怎么样很糟糕
?我明白你的意思,但只针对一些特定的词。比如人名等。也许我没有为示例选择最好的词。我认为正则表达式会很酷,但我开始认为它在没有正则表达式的情况下,在多行代码中使用正则表达式可能会更好。正则表达式可能比您需要的更强大。在空格上拆分,然后进行您自己的检查。它是否必须使用正则表达式?如果字符串只是昼光下的呢?今天如何?
?今天如何?这一天很糟糕
?我明白您的意思,但只针对一些特殊的词。比如人名等。也许我没有选择最好的词作为例子。我认为正则表达式会很酷,但我开始认为在没有正则表达式的情况下用几行代码来实现可能会更好。正则表达式可能比你需要的更强大。在空白处拆分,然后自己检查。哇,谢谢,这似乎是w工作。我要做工作测试,但到目前为止还有效!不客气。如果它给出了一个好的解决方案,请随意接受答案。什么是“?”的意思?我在谷歌上搜索,但还找不到它。@sebastian-抱歉,到目前为止还没有看到这个。(?s)
是点所有嵌入的修改器。请看我的最新编辑。祝你好运!哇,谢谢,这似乎起作用了。我将进行工作测试,但到目前为止它起作用了!不客气。如果它给出了一个好的解决方案,请随意接受答案。什么意思?我在谷歌上搜索,但还找不到它。@sebastian-抱歉,到现在为止还没有看到这个。(?s)
是点所有嵌入的修饰符。请参阅我的最新编辑。祝你好运!似乎匹配了糟糕的一天
,它们之间有额外的空格。不知道是否可以通过那里的lookbehind断言解决。似乎匹配了糟糕的一天
,它们之间有额外的空格。不知道是否可以通过lo解决好的。