如何仅 select 前瞻匹配
How to only select the lookahead matches
我找到了一个很好的正则表达式,但我很难排除部分匹配项。
我想要的是 select 括号,但前提是开始和结束括号之间有 1 个数字(多位数字)或单个字符,或者它们之间为空 ()。如果 () 前面有一些字符,则不应 select 它。我正在使用它来替换字符串的某些部分,因此我只想匹配括号,因为我想删除它们。当前正则表达式匹配括号和其中的部分。
.(?<=[^a-z]\()([\d]*|[a-zA-Z])(?=\)).
(x+2)/(x) -> only select ( ) in (x)
-(2)+. -> only select ( ) in (2)
(wsd). -> select nothing
(x)^2+2 -> only select ( ) in (x)
sin(x). -> select nothing
(22313)a. -> only select ( ) in (22313)
+23-3()/(3x)+(x). -> only select () in () and ( ) in (x)
sin(x)+3*x^2+(x)+23 -> only select ( ) in (x)
知道如何 NOT-select 括号之间的部分吗?
我已经设置了一个正则表达式测试器:
https://regex101.com/r/fYDm2L/1
Python 解决方案是:
x - 输入行
import re
for el in re.finditer(r"[YOUR REGEX HERE]", x):
print(x[el.start():el.end()])
x=x.replace(x[el.start():el.end()], x[el.start():el.end()].replace("(", "").replace(")", ""))
所以 - 根据你的问题,我假设你的正则表达式工作正常(如果我错了请纠正我)并且你只想替换括号,如果正则表达式匹配。
在这种情况下 - finditer 将遍历所有匹配的字符串,然后通过以下方式引用每个找到的短语:x[el.start():el.end()]
- 你可以用它的固定(没有括号)形式替换它。
不要尝试一次匹配一个括号,描述整个子字符串并使用您可以在替换字符串中引用的捕获组:
var result:String = str.replace(/ (^|[^a-z]) \( (\d*|[a-z]) \) /gix, "");
我找到了一个很好的正则表达式,但我很难排除部分匹配项。
我想要的是 select 括号,但前提是开始和结束括号之间有 1 个数字(多位数字)或单个字符,或者它们之间为空 ()。如果 () 前面有一些字符,则不应 select 它。我正在使用它来替换字符串的某些部分,因此我只想匹配括号,因为我想删除它们。当前正则表达式匹配括号和其中的部分。
.(?<=[^a-z]\()([\d]*|[a-zA-Z])(?=\)).
(x+2)/(x) -> only select ( ) in (x)
-(2)+. -> only select ( ) in (2)
(wsd). -> select nothing
(x)^2+2 -> only select ( ) in (x)
sin(x). -> select nothing
(22313)a. -> only select ( ) in (22313)
+23-3()/(3x)+(x). -> only select () in () and ( ) in (x)
sin(x)+3*x^2+(x)+23 -> only select ( ) in (x)
知道如何 NOT-select 括号之间的部分吗?
我已经设置了一个正则表达式测试器: https://regex101.com/r/fYDm2L/1
Python 解决方案是:
x - 输入行
import re
for el in re.finditer(r"[YOUR REGEX HERE]", x):
print(x[el.start():el.end()])
x=x.replace(x[el.start():el.end()], x[el.start():el.end()].replace("(", "").replace(")", ""))
所以 - 根据你的问题,我假设你的正则表达式工作正常(如果我错了请纠正我)并且你只想替换括号,如果正则表达式匹配。
在这种情况下 - finditer 将遍历所有匹配的字符串,然后通过以下方式引用每个找到的短语:x[el.start():el.end()]
- 你可以用它的固定(没有括号)形式替换它。
不要尝试一次匹配一个括号,描述整个子字符串并使用您可以在替换字符串中引用的捕获组:
var result:String = str.replace(/ (^|[^a-z]) \( (\d*|[a-z]) \) /gix, "");