我是一名数字营销人员,没有编码经验。
我只想提取写在分隔符(|||)之间的第一个数据
[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 个数据,如下所示:
- 把你的数据放在 上
A1-A500
。 - 将函数粘贴上
B1
。 - 复制
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