Excel查找和替换函数正确的公式

时间:2020-07-19 02:44:36

标签: excel excel-formula

我希望使用excel中的查找和替换功能从类似于以下内容的单元格中删除例句:

text <br>〔「text」text,「text」text〕<br>(1)text「sentence―sentence/sentence」<br>(2)text「sentence―sentence」

句子位于“”括号之间,并且在括号内的某个位置包含―和/字符。
我尝试过「*―*/*」,但这会删除〔
使用查找和替换工具是否可以定位和删除这些特定的括号?

所需结果:

text <br>〔「text」text,「text」text〕<br>(1)text<br>(2)text「sentence―sentence」

4 个答案:

答案 0 :(得分:1)

很长的公式,但是在Excel O365中,您可以使用:

=SUBSTITUTE(CONCAT(FILTERXML("<t><s>"&SUBSTITUTE(CONCAT(IF(MID(A1,SEQUENCE(LEN(A1)),1)="「","</s><s>「",IF(MID(A1,SEQUENCE(LEN(A1)),1)="」","」</s><s>",MID(A1,SEQUENCE(LEN(A1)),1)))),"<br>","|$|")&"</s></t>","//s[not(contains(., '「') and contains(., '―') and contains(., '/') and contains(., '」'))][node()]")),"|$|","<br>")

只要您有权访问CONCAT,您也可以在Excel 2019中执行此操作,但是您必须将SEQUENCE(LEN(A1))换成ROW(A$1:INDEX(A:A,LEN(A1)))

enter image description here

答案 1 :(得分:0)

此公式在很多情况下都不起作用,但是,如果该字符串具有与示例中相同的规则,请尝试以下操作:

structure(c(0, 0, 0, 0, 0, 0, 0, 0, 0.608695652173913, 0.323529411764706, 
0.129032258064516, 0.176470588235294, 0.125, 0, 0, 0.173913043478261, 
0.323529411764706, 0.258064516129032, 0.294117647058824, 0.25, 
0, 0, 0.0869565217391304, 0.235294117647059, 0.419354838709677, 
0.352941176470588, 0.25, 0, 0, 0.130434782608696, 0.117647058823529, 
0.161290322580645, 0.117647058823529, 0.25, 0, 0, 0, 0, 0.032258064516129, 
0.0588235294117647, 0.125, 0, 0, 0, 0, 0, 0, 0, 0), class = "table", .Dim = c(7L, 
7L), .Dimnames = list(i = c("Aaa", "Aa", "A", "Baa", "Ba", "B", 
"Caa"), j = c("Aaa", "Aa", "A", "Baa", "Ba", "B", "Caa")))

enter image description here

解释其工作原理:

  1. 将字符=SUBSTITUTE(C5,"「" & INDEX(TRIM(MID(SUBSTITUTE(","&SUBSTITUTE(C5,"」","「"),"「",REPT(" ",99)),(ROW(A1:INDEX(A1:A100,LEN(C5)-LEN(SUBSTITUTE(C5,"」",""))))*2-1)*99,99)),MATCH("*―*/*",TRIM(MID(SUBSTITUTE(","&SUBSTITUTE(C5,"」","「"),"「",REPT(" ",99)),(ROW(A1:INDEX(A1:A100,LEN(C5)-LEN(SUBSTITUTE(C5,"」",""))))*2-1)*99,99)),0)) & "」","") 之间的字符串拆分为一个数组
  2. 使用"「 "and "」"查找字符串位置(请注意,它仅会返回一个值(如果存在),如果您有多个字符串,则可以将match("*―*/*",,0)替换为match("*―*/*",)并使用它作为获取匹配字符串的额外列)
  3. 使用search ("*―*/*",..)获取需要替换的字符串(结果)
  4. 将原始字符串替换为找到的结果index(array,match("*―*/*",..))

答案 2 :(得分:0)

或者,

在B1中输入公式:

=SUBSTITUTE(A1,"「"&TRIM(RIGHT(SUBSTITUTE(LEFT(A1,FIND("」",A1,FIND("/",A1))),"「",REPT(" ",99)),99)),"")

enter image description here

答案 3 :(得分:0)

您没有标记 [VBA] ,但是如果您不反对,则可以编写一个用户定义函数,该函数可以使用正则表达式来完成您想做的事情。

要输入此用户定义的函数(UDF), alt-F11 将打开Visual Basic编辑器。 确保在“项目资源管理器”窗口中突出显示您的项目。 然后,从顶部菜单中选择Insert/Module,然后 将下面的代码粘贴到打开的窗口中。

要使用此用户定义函数(UDF),请在某些单元格中输入诸如=replStr(A1)之类的公式。

Option Explicit
Function replStr(str As String) As String
    Dim RE As Object
    Const sPat As String = "\u300C(?:(?=[^\u300D]*\u002F)(?=[^\u300D]*\u2015)[^\u300D]*)\u300D"
    
Set RE = CreateObject("vbscript.regexp")
With RE
    .Global = True
    .Pattern = sPat
    replStr = .Replace(str, "")
End With
End Function

enter image description here

相关问题