julia如何用正则表达式删除字符串的某一部分


#1

比如:
A = “我是X的中国人,我爱我的祖国。”
变成如下:
A = “我是的中国人,我爱我的祖国。”
其中的x的长度不限,是什么也不限。
该怎么写?


#2
julia> replace("aaa123bbb",r"\d+"=>"")
"aaabbb"

#3

这个是删除数字?


#4

你不是要正则表达式吗?随便你删除什么啊


#5

他的意思是把r"\d+"这个正则表达式替换成需要删除的字符串就行了


#6

不好意思,可能我表述的不准确;是这样的,我有一系列的字符串,如下,
A1=“ab1c”;
A2=“ab2c”;
A3=“ab3c”

只有b1,b2,b3不相同,然后我想用同一个函数将这一系列的字符串转化成
“ac”。
即我并不晓得我要删除的字符串是什么,但是我晓得我要删除字符串的前后的字符是什么。该怎么做。


#7

如果最终的结果都相同的话,那么不妨直接做regex match就好了。


#8

是的,你这已经表述出三个问题了…
如果你想保留公共的前后缀,可以手动实现:

julia> allsame(itr)=all(x->x==first(itr),itr)
allsame (generic function with 1 method)

julia> prefixlen(itr,l=0,lmax=minimum(length,itr))=l<lmax&&allsame(getindex.(itr,l+1)) ? prefixlen(itr,l+1,lmax) : l
prefixlen (generic function with 3 methods)

julia> suffixlen(itr)=prefixlen(Iterators.reverse.(itr).|>collect)
suffixlen (generic function with 1 method)

julia> a=["ab1c","ab2c","ab3c"]
3-element Array{String,1}:
 "ab1c"
 "ab2c"
 "ab3c"

julia> lens=(prefixlen(a),suffixlen(a))
(2, 1)

julia> map(s->s[1:lens[1]]*s[end-lens[2]+1:end],a)
3-element Array{String,1}:
 "abc"
 "abc"
 "abc"

但是如果你只是想删除aaa和ccc之间的任意东西,直接正则匹配即可:

julia> s="123aaab1ccc456"
"123aaab1ccc456"

julia> replace(s,r"(?<=aaa).*(?=ccc)"=>"")
"123aaaccc456"

#9
function replacing(str,head,tail)
    reg = Regex(head+".*"+tail)
    replace(str,reg=>" ")
end

大致写个思路,还没测试