Regex:查找不带字符的字符串

vs91vp4v  于 2023-04-22  发布在  其他
关注(0)|答案(2)|浏览(109)

我构建正则表达式,匹配2个字母或2个字母后跟'/'和接下来的2个字母,例如:

rt bl/ws se gn/wd wk bl/rt

/^(((\s+)?[a-zA-Z]{2}(\/[a-zA-Z]{2})?)(\s+|$))+$/i

和工程没有问题.下一个问题,我有什么是匹配所有“字”不包含'/'字符.并替换所有匹配的重复值分隔的'/'.对于上述示例例外输出应该是:

rt/rt bl/ws se/se gn/wd wk/wk bl/rt

我试过一段时间但没有成功。你能帮我吗?

更新1:

我从匹配不包含“at”的单词的正则表达式开始

(\b((?!(at))\w)+\b)

我想用python替换匹配的元素,比如

re.sub(r'(\b((?!(at))\w)+\b)', r'\1/\1', text)

但首先要找到合适的元素

xienkqul

xienkqul1#

如果你使用的是支持负向后查找的正则表达式,这个正则表达式应该会找到你想要替换的字符串:
(?<!\/)([A-Za-z]{2}(?!\/))
(?<!\/)-确保匹配后面没有/
([A-Za-z]{2}查找两个字母字符
(?!\/))确保没有尾随/
在Python中,你可以这样使用它:

print(re.sub(r'(?<!\/)([A-Za-z]{2}(?!\/))',r'\1/\1','rt bl/ws se gn/wd wk bl/rt'))

输出:

rt/rt bl/ws se/se gn/wd wk/wk bl/rt

Demo on rextester
在PHP中,你可以这样使用它:

$str = 'rt bl/ws se gn/wd wk bl/rt';
echo preg_replace('/(?<!\/)([A-Za-z]{2}(?!\/))/', '$1/$1', $str);

输出:

rt/rt bl/ws se/se gn/wd wk/wk bl/rt

Demo on 3v4l.org

gdrx4gfi

gdrx4gfi2#

let string = 'rt bl/ws se gn/wd wk bl/rt'

console.log(string.replace(/(?:(?<=^)|(?<= ))(\w+)(?= |$)/gi, '$1/$1'))

相关问题