如何提取两个点之间的文本
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。
你好有人能告诉我如何提取两个点之间的文本吗?
示例: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()]
- 节点的位置小于最后一个索引。
有关该构造的更多信息,我想您可以查看
请注意,您也可以在 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。