如何提取两个点之间的文本

How to extract text between two dots

你好有人能告诉我如何提取两个点之间的文本吗?

示例:goldintre.cr.usgs.gov.

我想要从第一个点到最后一个点的所有文本(开头和结尾没有点)

这必须在不从源文本中删除最后一个点的情况下完成。

谢谢

如果你有 Excel 365 然后单元格 A1 中的数据使用:

=LET(x,FIND(".",A1)+1,y,LEN(A1),MID(A1,x,y-x))

(假设最后总是有一个点)

警告:以下所有可能的答案都假定您的值中至少有 两个 点!如果不是这种情况,您需要为 Excel 添加 IFERROR(),其中 LibreCalc 将显示为空。


LibreCalc

B1中的公式:

=REGEX(A1;"(?:^[^.]*\.|\.[^.]*$)";"";"g")

模式的一点解释:

  • (?: - 打开非捕获组。
    • ^[^.]*\. - 开始字符串 ancor,后跟零个或多个除文字点以外的字符,再后跟一个点。
    • | - 或者.
    • \.[^.]*$ - 一个字面点,后跟零个或多个字符,而不是字面点,后跟结束字符串 ancor。
    • ) - 关闭非捕获组。

根据 this 在线演示,您可以看出替换现在将“删除”标记的文本。

供您参考,分号是 LibreCalc 中的标准分隔符(并且经常被 Excel 的标准分隔符逗号混淆)。


Excel 2019/O365

B1中的公式:

=TEXTJOIN(".",,FILTERXML("<t><s>"&SUBSTITUTE(A1,".","</s><s>")&"</s></t>","//s[position()>1][position()<last()]"))

虽然当您拥有 Excel O365 时,它是更好地使用 LET() 的更长替代方案,但它也适用于 Excel 2019 并利用 TEXTJOIN()和一些 XPATH 表达式,意思是:

  • //s - Return 所有“s”个节点。
  • [position()>1] - 节点的位置大于第一个索引并且:
  • [position()<last()] - 节点的位置小于最后一个索引。

有关该构造的更多信息,我想您可以查看 。上一个 post.

请注意,您也可以在 LibreCalc 中使用它,但您需要使用经过修改的安装,因为默认函数 FILTERXML() 有一个错误。


Excel 一般情况下:

对于 Excel 的较早部分,您可以使用:

=MID(A1,FIND(".",A1)+1,FIND("|",SUBSTITUTE(A1,".","|",LEN(A1)-LEN(SUBSTITUTE(A1,".",""))))-FIND(".",A1)-1)

基本上我们首先确定字符串中有多少个点,然后我们 SUBSTITUTE() 管道符号(或与此相关的任何唯一字符)中的最后一个点 FIND()它的位置。如果我们确定第一个点的位置,那么当我们在 MID().

中提供起始和长度参数时,这是一个简单的计算问题

编辑

经过 OP 的更好解释后,他的字符串值似乎总是以点结尾。在这种情况下,您可以简单地 REPLACE() 字符串的第一部分:

=REPLACE(LEFT(A1,LEN(A1)-1),1,FIND(".",A1),"")

这也会使在 LibreCalc 中的工作变得更容易一些:

=REGEX(A1;"^[^.]*\.(.*).$";"";"g")

您没有提供足够的数据详细信息以及所需的输出。那就考虑一下所有的可能性吧。

Case-1 你总是有一个 . 最后,你想要第一个和最后一个点之间的文本。使用这个公式 -

=MID(A1, SEARCH(".", A1)+1, LEN(A1)-SEARCH(".", A1)-1)

这会给你 cr.usgs.gov 作为输出。

案例 2 您无需考虑最后一个点并删除该点之前的文本(再次假设最后一个点位于最后一个位置)

=MID(A1,SEARCH(".",A1)+1, SEARCH("$",SUBSTITUTE(A1,".", "$", LEN(A1)-LEN(SUBSTITUTE(A1, ".", ""))-1))-SEARCH(".",A1)-1)

这将为您提供 cr.usgs 作为输出(同时假设 $ 不存在于您的任何文本字符串中。

其他情况当你没有在所有地方的最后一个地方点。为此,您必须稍微调整一下公式。

=MID(A1,SEARCH(".",A1)+1, SEARCH("$",SUBSTITUTE(A1,".", "$", LEN(A1)-LEN(SUBSTITUTE(A1, ".", ""))))-SEARCH(".",A1)-1)

如果您的输入 (A1) 是 ab.cd.ef.ghi,这将为您提供输出 cd.ef。在 case-2 公式中,我刚刚删除了额外的 -1,它用于从文本字符串中排除最后一个点。

注意这个公式适用于所有版本的excel。