正则表达式匹配两个字符的任意组合
Regex match any combination of two characters
我正在尝试从字符串中删除多余的通配符,但遇到了一些麻烦。如果有任何 ?
或 *
的组合,我想用 *
替换它。例如我想简化
"*?a?s?*?k?i?n?a?r?d?*?*?d?e?d?i?c?a?t?e?d?*?r?e?g?i?o?n?a?l*"
至
"*a?s*k?i?n?a?r?d*d?e?d?i?c?a?t?e?d*r?e?g?i?o?n?a?l*"
在 Google 表格中,我正在使用 REGEXREPLACE
函数,并且可以到达那里的一部分。
=REGEXREPLACE(A1,"(\?\*)+","*")
"*?a?s*?k?i?n?a?r?d*?d?e?d?i?c?a?t?e?d*?r?e?g?i?o?n?a?l*"
然而,阅读其他线程似乎我必须以某种方式使用 |
以允许 *?
或 ?*
。但是当我尝试添加它时,所有 ?
都被删除了。
有什么建议吗?
这样试试:
=REGEXREPLACE(A1,"(\?\*|\*\?)+(\*|\?)?","*")
这里的关键部分是考虑不平衡的 "pairs",例如 ?*?
和可选的 ?
。但我们不能忘记平衡对。
关于 alternations 的一个重要部分是将它们从长到短排序以避免结果出现双重、三重等 *
- 但这不适用于此处。
问题中没有提到,但是如果还允许符号的倍数,我们可以将这样的模式与通用正则表达式引擎一起使用:(?:\?\*|\*\?|(\*|\?))+(\*|\?)?
但是,Google 表格中的 REGEXREPLACE
无法做到这一点。相反,我们可以链式替换这些案例。
=REGEXREPLACE(A1,"\?*\*[?*]*","*")
基本上,任何序列的 ?s 和 *s 至少有一个 *.
=REGEXREPLACE(A1,"[\?\*]{2,}","*")
任何 combinations:2 或更多的 {?
,*
} 将替换为 *
我正在尝试从字符串中删除多余的通配符,但遇到了一些麻烦。如果有任何 ?
或 *
的组合,我想用 *
替换它。例如我想简化
"*?a?s?*?k?i?n?a?r?d?*?*?d?e?d?i?c?a?t?e?d?*?r?e?g?i?o?n?a?l*"
至
"*a?s*k?i?n?a?r?d*d?e?d?i?c?a?t?e?d*r?e?g?i?o?n?a?l*"
在 Google 表格中,我正在使用 REGEXREPLACE
函数,并且可以到达那里的一部分。
=REGEXREPLACE(A1,"(\?\*)+","*")
"*?a?s*?k?i?n?a?r?d*?d?e?d?i?c?a?t?e?d*?r?e?g?i?o?n?a?l*"
然而,阅读其他线程似乎我必须以某种方式使用 |
以允许 *?
或 ?*
。但是当我尝试添加它时,所有 ?
都被删除了。
有什么建议吗?
这样试试:
=REGEXREPLACE(A1,"(\?\*|\*\?)+(\*|\?)?","*")
这里的关键部分是考虑不平衡的 "pairs",例如 ?*?
和可选的 ?
。但我们不能忘记平衡对。
关于 alternations 的一个重要部分是将它们从长到短排序以避免结果出现双重、三重等 *
- 但这不适用于此处。
问题中没有提到,但是如果还允许符号的倍数,我们可以将这样的模式与通用正则表达式引擎一起使用:(?:\?\*|\*\?|(\*|\?))+(\*|\?)?
但是,Google 表格中的 REGEXREPLACE
无法做到这一点。相反,我们可以链式替换这些案例。
=REGEXREPLACE(A1,"\?*\*[?*]*","*")
基本上,任何序列的 ?s 和 *s 至少有一个 *.
=REGEXREPLACE(A1,"[\?\*]{2,}","*")
任何 combinations:2 或更多的 {?
,*
} 将替换为 *