我可以看到围绕这个主题的很多帖子,但没有一个专门解决我的问题。
我有一个包含文字和数字的字符串。我需要在第一次看到数字时将字符串拆分为2列。
示例:
location = /character {
try_files character.php /character.php;
}
location = /character/ {
try_files character.php /character.php;
}
location ~ /character/([0-9]+)$ {
try_files character.php /character.php?id=$1;
}
location ~ /character/([A-z]+)$ {
try_files character.php /character.php?page=$1;
}
location ~ /character/([0-9]+)/([A-z]+)$ {
try_files character.php /character.php?id=$1&page=$2;
}
location ~ /character/([0-9]+)/([A-z]+)/date/(.*)$ {
try_files character.php /character.php?id=$1&page=$2&date=$3;
}
location ~ /character/([A-z]+)/date/(.*)$ {
try_files character.php /character.php?page=$1&date=$2;
}
location ~ /character/([0-9]+)/([A-z]+)/sid/([0-9]+)$ {
try_files character.php /character.php?id=$1&page=$2&sid=$3;
}
location ~ /character/([A-z]+)/sid/([0-9]+)$ {
try_files character.php /character.php?page=$1&sid=$2;
}
location ~ /character/([A-z]+)/action/([A-z]+)/sid/([0-9]+)$ {
try_files character.php /character.php?page=$1&action=$2&sid=$3;
}
变为:
答案 0 :(得分:3)
您可以使用简单的公式查找第一个数字,以及LEFT
和MID
来分割字符串。
第1部分:
=LEFT(A1,MIN(FIND({1,2,3,4,5,6,7,8,9,0},A1&"1234567890"))-1)
第2部分:
=MID(A1,MIN(FIND({1,2,3,4,5,6,7,8,9,0},A1&"1234567890")),99)
答案 1 :(得分:3)
这是一个正则表达式方法:
您必须设置对
for i in range(1, len(list1)): if list1[i]==1: newlist2[i-1]+newlist2[i][-1] else: do nothing
的引用,其中x.x是您拥有的最高版本(我的是5.5)
Microsoft VBScript Regular Expressions x.x
Option Explicit
Sub splitCells()
Dim RegEx As New RegExp, i As Long, tempStr As String
With RegEx
.Global = True
.IgnoreCase = True
.Pattern = "(([a-z]*\s?)*\D)(\d.*)"
End With
With ThisWorkbook.Worksheets(1)
For i = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row
If RegEx.Test(.Cells(i, 1)) Then
tempStr = .Cells(i, 1)
.Cells(i, 1) = RegEx.Replace(tempStr, "$1")
.Cells(i, 2) = RegEx.Replace(tempStr, "$3")
End If
Next i
End With
End Sub
(([a-z]*\s?)*\D)(\d.*)
匹配字母表中的任何字符,[a-z]*
乘数无限制出现
*
匹配任何空格字符,使用\s?
乘数匹配0-1次出现(意味着可能有也可能没有空格
以上两个都包含在分组?
中,后跟另一个()
以匹配0无限制的出现
*
这排除了所有数字
以上内容包含在第一个\D
我们有最后一组:(([..])*\D)
,匹配第一个数字和之后的所有其他数据。
答案 2 :(得分:2)
这是您可以在工作表上使用的一对函数(而不是必须运行VBA过程来“修复”一次单元格):
Public Function splitNum1(str As String) As String
Dim p
For p = 1 To Len(str)
If Mid(str, p, 1) Like "#" Then Exit For
Next
splitNum1 = Left(str, p - 1)
End Function
Public Function splitNum2(str As String) As String
splitNum2 = Right(str, Len(str) - Len(splitNum1(str)))
End Function
splitNum1
返回"左"上的字符串数字的一面。
splitNum2
返回以第一个数字开头的字符串。