Google sheets 提取重复的URL参数字符串

Google sheets 提取重复的URL参数字符串,google-sheets,google-spreadsheet,Google Sheets,Google Spreadsheet,我想提取c=;t=;s=值到列,在Google工作表中以带逗号的分隔字符串表示。这些值可以重复多次,最多重复10次。 c=总是只有两个大写字母 例如: A examples &t=clothes&t=bags&s=other&c=US&c=FR&c=GB &c=NL &t=glasses &c=US&c=FR&c=GB&t=watches&t=necklaces&s=other&a

我想提取
c=;t=;s=
值到列,在Google工作表中以带逗号的分隔字符串表示。这些值可以重复多次,最多重复10次。
c=
总是只有两个大写字母

例如:

A   examples
&t=clothes&t=bags&s=other&c=US&c=FR&c=GB
&c=NL
&t=glasses
&c=US&c=FR&c=GB&t=watches&t=necklaces&s=other&s=required

B column (c= strings)
   US, FR, GB
C column (t= strings)
   clothes,bags
D column (s= strings)
   other, required
试试看


我更喜欢Jeeped的解决方案,但如果您正在寻找VBA实现的话

Private Sub parse_c()
    Dim result As String
    Dim lr As Long

    lr = Cells(Rows.Count, 1).End(xlUp).Row
    result = ""

    For Each cell In Range("A1:A" & lr)
        For i = 1 To Len(cell)
            If (Mid(cell, i, 2) = "c=") Then
                If (result = "") Then
                    result = Mid(cell, i + 2, 2)
                Else
                    result = result & ", " & Mid(cell, i + 2, 2)
                End If
            End If
        Next i
        cell.Offset(0, 1) = result
        result = ""
    Next cell

End Sub
循环遍历A列中的所有活动单元格,并用所需分隔符减去所有国家/地区

测试:(还带有一些诡计,例如
=cc=UK

  • [A-Z]任何两个字母大写的单词
  • [^A-Z]不是两个字母的大写单词

根据您的输入,您可以决定遵循以下逻辑:将所有字母大写,并用空格分隔。美国/英国标准字母表中的大写字母为26,ASCII表中的大写字母介于65和90之间

因此,从每个值循环并检查其是否在65和90之间就可以了:

Public Function GetUpperCase(inputVal As String) As String

    Dim resultVal As String
    Dim i As Long

    For i = 1 To Len(inputVal)
        If Asc(Mid(inputVal, i, 1)) >= 65 And Asc(Mid(inputVal, i, 1)) <= 90 Then
            resultVal = resultVal & Mid(inputVal, i, 1)
        Else
            resultVal = resultVal & " "
        End If
    Next i

    GetUpperCase = WorksheetFunction.Trim(resultVal)

End Function
公共函数GetUpperCase(inputVal作为字符串)作为字符串
Dim resultVal作为字符串
我想我会坚持多久
对于i=1到Len(inputVal)

如果Asc(Mid(inputVal,i,1))>=65和Asc(Mid(inputVal,i,1))@i'-'i,我觉得这里不需要它。这里的模式总是在“
c=
”之后提取,直到“
&
”我希望这里的用户提供他当前的努力来解决这个问题。@I'-'I我明白你的意思并同意。我的意思是,很明显,这只会对我们有利,所以我完全赞成,我只是说我觉得这不是绝对必要的。@l'-'l我提供了更多的例子,谢谢。@jeeped感谢这个解决方案。我添加了更多的例子,当c=出现在其他标记之前时,这个解决方案不起作用。i、 e?c=US&t=tags是否有解决方法?这实际上是一个简单的解决方案,但a)查询中的更改使此解决方案无效,并且不鼓励对使以前的回答无效的问题进行更改b)新的样本数据将解决方案从一个思维链更改为另一个思维链。无法进行“快速修改”以调整此响应以适应。c) 随着新样本数据的问题增加,您将不得不决定您是在寻找一个解决方案还是一个解决方案。感谢@l'-'l,这非常有效。
=textjoin(“,”,true,split(REGEXREPLACE(A1,“[^a-Z]”,“|”),“|””)
=REGEXEXTRACT(SUBSTITUTE(A1,"&c=",","),"((?:[A-Z]{2},?)+)")
=REGEXREPLACE(REGEXREPLACE(A1,"([^A-Z]*)([A-Z]{2})([^A-Z]*)","$2, "),".$",)
Public Function GetUpperCase(inputVal As String) As String

    Dim resultVal As String
    Dim i As Long

    For i = 1 To Len(inputVal)
        If Asc(Mid(inputVal, i, 1)) >= 65 And Asc(Mid(inputVal, i, 1)) <= 90 Then
            resultVal = resultVal & Mid(inputVal, i, 1)
        Else
            resultVal = resultVal & " "
        End If
    Next i

    GetUpperCase = WorksheetFunction.Trim(resultVal)

End Function