我试图用记事本++实现这一点
输入文件有模式
<代码片段语句 - 这是变量,后跟...> (括号内的质量)
-- "command xyz d
command rererere
command ;" ( fair quality)
---- "command xyz d
command rereredfdfdre
command ffdfdfdf ;" ( good quality)
---- "command xffddyz d
command rerfdferere
command ;" ( good quality)
----"command fdfdfxyz d
command refffdrerere
command fdfdff;" ( fair quality)
我想做的是什么
- 查看( fair quality )
的所有实例(请注意( and fair
之间的间距是可变的,然后使用( fair quality )
删除整个语句
o / p是这样的:
---- "command xyz d
command rereredfdfdre
command ffdfdfdf ;" ( good quality)
---- "command xffddyz d
command rerfdferere
command ;" ( good quality)
我尝试了一些基本的正则表达式替换搜索( fair quality)
但是如何删除from x to y
之前的整个字符串?
请不要认为间距模式是规则的。它会改变
例如
"command xyz..( fair quality);"
"command xyz (fair quality );"
2个字符串之间的间距没有任何规律性,这可以用于正则表达式工作。
有时也会有不必要的换行符,例如。
"command
xyz..( fair
quality);"
所以行结束假设也无济于事
所以精确的正则表达式逻辑将是
- 去找我fair
的实例
- 在command
的实例之前找到fair
的第一个实例
- 在"
之前找到command
的第一个实例。我们将此称为X
- 在"
之后找到fair
的第一个实例。我们将此称为Y
- 从X
删除至Y
答案 0 :(得分:1)
你需要temper greedy token solution
的正则表达式找到
-*\s*"command\b((?!\bquality\b\s*\)).)*\(\s*fair\s+quality\s*\)(;")?\r?\n?
替换为空,确保正则表达式与.
匹配换行符
正则表达式详情:
-*\s*"command\b
- 匹配“before command ((?!\bquality\b\s*\)).)*
- 匹配任何不属于的字符
quality)
脾气贪婪的令牌\(\s*fair\s+quality\s*\)(;")?\r?\n?
- 匹配fair quality
部分,
包括;"
和背后的新行输入测试
-- "command xyz d
command rererere
command ;" ( fair quality)
---- "command xyz d
command rereredfdfdre
command ffdfdfdf ;" ( good quality)
---- "command xffddyz d
command rerfdferere
command ;" ( good quality)
----"command fdfdfxyz d
command refffdrerere
command fdfdff;" ( fair quality)
----"command fdfdfxyz d
command refffdrerere
command
xyz..( fair
quality);"
"command xyz..( fair quality);"
"command xyz (fair quality );"
输出
---- "command xyz d
command rereredfdfdre
command ffdfdfdf ;" ( good quality)
---- "command xffddyz d
command rerfdferere
command ;" ( good quality)
答案 1 :(得分:1)
你可以这样做:
-+\s*"[^"]+?"\s*\(\s*fair quality\)
NOTHING
<强>解释强>
-+ : one or more dash
\s* : 0 or more spaces
" : a double quote
[^"]+? : one or more any character that is not a double quote
" : a double quote
\s* : 0 or more spaces
\( : an open parenthesis
\s* : 0 or more spaces
fair quality : literally 'fair quality'
\) : a close parenthesis