我再次完全陷入创建正则表达式的困境。
我有一个字符串模式,例如:
str = ' wordA [] wordAB [xyz] wordABC [x] '
所以总有一个词后面跟有括号里的东西[ ... ]
或空括号[]
。单词的长度、前导和尾随空格以及括号内的字符数是随机的。该序列重复的频率也是随机的。
我想只提取不带括号的单词:
output =
'wordA' 'wordBC' 'wordABC'
我认为问题在于方括号,因为它们是正则表达式的功能字符。我尝试过类似的东西
output = regexp(str,'^\[.+\]$','split')
和没有成功的变化。
有什么提示吗?
我们可以使用选择所有单词\w+
正则表达式。但它会选择所有单词(包括括号中的单词)。括号外的单词前后都有空格,因此我们可以添加正向lookbehind(?<=\s)
- 确保单词之前有空格,并且积极向前看(?=\s)
- 确保单词后面有空格。此外,第一个单词前面没有空格,因此我们需要包含要包含的条件字符串的开头也给我们积极的回顾(?<=\s|^)
。最后我们有了完整的正则表达式:
(?<=\s|^)\w+(?=\s)
如果你能拥有wordA[]
字符串(没有空格),那么你需要添加[
积极的前瞻。
(?<=\s|^)\w+(?=\s|\[)
如果你能拥有wordA [ xyz ]
字符串(括号内的空格),上面的正则表达式不起作用,我们需要不同的策略 - 查找没有的单词[
前。但我们不能只说前面没有 [ 的单词,因为它会匹配yz
in [xyz]
,我们需要说我们需要的词不以[
和符号以外的]
.
(?<!\[[^]]*)\w+
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)