我正在使用以下公式:
=LEFT(A1,(FIND(" ",A1,1)-1))
提取第一个空格之前的单元格字符。但是某些单元格没有空格,否则只需将所有字符提取到单元格中即可。例如我有
apple
banana (yellow)
zucchini (green)
我希望公式返回:
apple
banana
zucchini
但是我却收到了VALUE错误,因为“ apple”单元格中没有空格:
#VALUE!
banana
zucchini
答案 0 :(得分:2)
这应该为您工作
= IF(ISERROR(LEFT(A1,(FIND(“” ,, A1,1)-1))),A1,LEFT(A1,(FIND(“ ,, A1,1)-1)))< / p>
答案 1 :(得分:2)
使用public static boolean isEmailValid(String email)
{
Pattern pattern;
Matcher matcher;
final String EMAIL_PATTERN = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
pattern = Pattern.compile(EMAIL_PATTERN);
matcher = pattern.matcher(email);
return matcher.matches();
}
并删除可选的起始位置参数(因为默认值为1):
IFERROR
答案 2 :(得分:1)
我倾向于添加一个虚拟空间:
=LEFT(A1,FIND(" ",A1&" ")-1)
(在空单元格中不给零)
答案 3 :(得分:1)
我发现REPLACE比LEFT具有更多的功能。将搜索字符附加到原始字符以避免错误是很好的做法。
=REPLACE(A2, FIND(" ", A2&" "), LEN(A2), TEXT(,))
答案 4 :(得分:0)
对于S&G而言,使用正则表达式的用户定义功能
Option Explicit
Public Sub TEST()
Dim tests(), i As Long
tests = Array("apple", "banana (yellow)", "zucchini (green)")
For i = LBound(tests) To UBound(tests)
Debug.Print GetString(tests(i))
Next
End Sub
Public Function GetString(ByVal inputString As String) As String
With CreateObject("VBScript.RegExp")
.Global = True
.MultiLine = True
.Pattern = "^\S*"
If .TEST(inputString) Then
GetString = .Execute(inputString)(0)
Else
GetString = vbNullString
End If
End With
End Function
正则表达式:
尝试here
^声明行首的位置
\ S *匹配任何非空白字符(等于[^ \ r \ n \ t \ f \ v])
*量词-匹配零次至无限次,并尽可能多地匹配,并根据需要进行回馈(贪婪)
表格: