简短答案

简短答案

我是一名数字营销人员,没有编码经验。

我只想提取写在分隔符(|||)之间的第一个数据

[VP/NNP] ||| talk here ||| walk here ||| PPDB2.0Score=6.03040 PPDB1.0Score=1.919110 -logp(LHS|e1)=7.19109 -logp(LHS|e2)=0.42834 -logp(e1|LHS)=15.32573 -logp(e1|e2)=0.49145 -logp(e1|e2,LHS)=5.83537 -logp(e2|LHS)=9.49919 -logp(e2|e1)=1.42766 -logp(e2|e1,LHS)=0.00883 AGigaSim=0.91193 Abstract=0 Adjacent=0 CharCountDiff=-1 CharLogCR=-0.03077 ContainsX=0 Equivalence=0.182028 Exclusion=0.008591 GlueRule=0 GoogleNgramSim=0.52732 Identity=0 Independent=0.187394 Lex(e1|e2)=62.90141 Lex(e2|e1)=62.90141 Lexical=1 LogCount=0.69315 MVLSASim=NA Monotonic=1 OtherRelated=0.000021 PhrasePenalty=1 RarityPenalty=0.00005 ReverseEntailment=0.621966 SourceTerminalsButNoTarget=0 SourceWords=6 TargetTerminalsButNoSource=0 TargetWords=6 UnalignedSource=0 UnalignedTarget=0 WordCountDiff=0 WordLenDiff=-0.16667 WordLogCR=0 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| ReverseEntailment

结果:

talk here ||| walk here

如何使用 notepad++ 或 Microsoft word 或 excel 实现此结果?

答案1

使用 Notepad++


  • Ctrl+H
  • 找什么:^[^|]*\|{3}([^|]*\|{3}[^|]*).*$
  • 用。。。来代替:$1
  • 查看 环绕
  • 查看 正则表达式
  • 取消选中 . matches newline
  • Replace all

解释:

^           # beginning of line
  [^|]*       # 0 or more any character that is not a pipe
  \|{3}       # 3 pipe character
  (           # group 1
    [^|]*       # 0 or more any character that is not a pipe
    \|{3}       # 3 pipe character
    [^|]*       # 0 or more any character that is not a pipe
  )           # end group
  .*          # 0 or more any character
$           # end of line

替代品:

$1          # content of group 1

截图(之前):

在此处输入图片描述

截图(之后):

在此处输入图片描述

答案2

简短答案

如果您想通过 Excel 来完成此操作,请将数据放在单元格上A1,然后将以下函数粘贴到任意单元格上:

=MID(A1,
FIND(" ||| ",A1,1)+5,
FIND(" ||| ",A1,FIND(" ||| ",A1,FIND(" ||| ",A1,1)+5)+5)-FIND(" ||| ",A1,1)-5
)

您可以参考下图来了解详情。

脚步

还:如果你想处理 500 个数据,如下所示:

  1. 把你的数据放在 上A1-A500
  2. 将函数粘贴上B1
  3. 复制B1并粘贴到单元格上B2-B500

这样,Bx就得到了处理后的数据Ax

如何构造函数

Excel 的一个奇怪之处是,它从 1 开始计数索引,而不是从 0 开始。

考虑到这一点,我们:

细胞 内容 功能 简化功能
A1 input - -
B1 delimiter - -
C1 第一个分隔符后的字符索引 =FIND(B1,A1,1)+5 =FIND(" ||| ",A1,1)+5
D1 第二个定界符后的字符索引 =FIND(B1,A1,C1)+5 =FIND(" ||| ",A1,FIND(" ||| ",A1,1)+5)+5
E1 第三个定界符后的字符索引 =FIND(B1,A1,D1)+5 =FIND(" ||| ",A1,
FIND(" ||| ",A1,FIND(" ||| ",A1,1)+5)+5)
+5
F1 第一个和第三个定界符之间的字符 =MID(A1,
C1,
E1-C1-5)
=MID(A1,
FIND(" ||| ",A1,1)+5,
FIND(" ||| ",A1,FIND(" ||| ",A1,FIND(" ||| ",A1,1)+5)+5)-FIND(" ||| ",A1,1)-5)

我们拥有这个功能!

但是,如果我使用这个 Excel 文件,我不会像这样减少函数。相反,我会将列保持B-E隐藏状态,并在中查看输出F。这为我们提供了更大的灵活性,并且代码仍然易于理解。

答案3

使用FILTERXML(A1 中的输入):

=FILTERXML("<t><s>"&SUBSTITUTE(A1," ||| ","</s><s>")&"</s></t>","//s")

它使用分隔符拆分字符串|||并返回一个“数组”,您可以使用以下方式访问该数组中的元素INDEX

=INDEX(FILTERXML("<t><s>"&SUBSTITUTE(A1," ||| ","</s><s>")&"</s></t>","//s"),2)

它返回“talk here”。你可以用同样的方式获取“walk here”:

=INDEX(FILTERXML("<t><s>"&SUBSTITUTE(A1," ||| ","</s><s>")&"</s></t>","//s"),3)

并将两者连接起来,例如使用TEXTJOIN

相关内容