我正尝试将一组外部配对的字符串与正则表达式匹配。
关于此问题至少有一篇文章,但是我不清楚这是如何工作的。 Regex match text outside of brackets
例如,示例字符串为:
<= \( <= \) <= \( <= \) <= \( <= \)
我当前的正则表达式使用了先行式和后行式,尽管这不起作用:
(?<=(\\\)))<=(?=(\\\())
我想匹配{=不在\( \)
之间的<=,所以我可以用&le替换它以获得:
&le \( <= \) &le \( <= \) &le \( <= \)
请注意,\( \)
可能存在或可能不存在。
答案 0 :(得分:1)
您必须为此使用替换功能。最终匹配output_data = dataset.iloc[:,9].values
#Encoding the categorical output data (There is no categorical input data)
one_hot_encoder = OneHotEncoder(categorical_features = [0])
output_data = one_hot_encoder.fit_transform(output_data).toarray()
,然后匹配\(
,或者匹配\)
。如果括号匹配,则用整个匹配替换(以使括号内的内容保持不变)-否则,将<=
匹配替换为<=
:
&le
const input = String.raw`<= \( <= \) <= \( <= \) <= \( <= \)`;
const output = input.replace(
/\\(.*?\\)|<=/g,
match => match === '<=' ? '&le' : match
);
console.log(output);
表示匹配:
\\(.*?\\)|<=
-文字反斜杠,后跟\\(
(
-任何字符,直到遇到.*?
-文字反斜杠,后跟\\)
或匹配
)
-普通字符<=
(如果JS引擎更高级,则可能没有替换功能,例如<=
,但JS不支持该功能)
在Javascript中使用后向时要小心-只有非常新的浏览器才支持。许多较旧的浏览器无法理解它,并且会引发错误。如果您希望自己的网站能够为尽可能多的访问者服务,则最好避免在可能的情况下(至少在可预见的将来)使用向后搜索。
答案 1 :(得分:0)
您可以使用(?<!([^\\]*\\\())(<=)(?!([^\\]*\\\)))
,它使用否定的lookbehinde和否定的lookahead来确保后面没有\(
,并且前面没有\)
。
否定前瞻/后视与肯定前瞻/后视相同,除了它检查是否不存在该组而不是检查是否存在。
希望这会有所帮助。