Nó phức tạp hơn vẻ bề ngoài. Một kx + m có thể có tối đa 7 toán tử và tối thiểu của 1 toán tử nếu tôi không sai. Và trong một kịch bản như vậy nó trở nên thực sự phức tạp để có được các giá trị "K" và "M". - Siddharth rout 33 mins ago
Dựa trên nhận xét của tôi trong bài viết duffymo của
ảnh chụp này cho thấy các kết hợp khác nhau mà “kx + m” có thể có

Và như đã đề xuất trước đó, rất phức tạp để đạt được những gì bạn muốn. Đây là nỗ lực của tôi yếu ớt để chỉ trích xuất "K" tại thời điểm này. Mã này không có cách nào sang trọng theo bất kỳ cách nào :(Ngoài ra tôi chưa thử nghiệm mã với các kịch bản khác nhau nên có thể không thành công với người khác. Tuy nhiên, nó cung cấp cho bạn ý tưởng hợp lý về cách tiếp cận vấn đề này. tinh chỉnh thêm để có được kết quả chính xác mà bạn muốn.
CODE (Tôi đang thử nghiệm cho 7 kết hợp có thể có trong mã này.Nó hoạt động cho những 7 nhưng có thể/sẽ thất bại cho người khác)
Option Explicit
Sub Sample()
Dim StrCheck As String
Dim posStar As Long, posBrk As Long, pos As Long, i As Long
Dim strK As String, strM As String
Dim MyArray(6) As String
MyArray(0) = "-k*(-x)+(-m)*(-2)"
MyArray(1) = "-k*x+(-m)*(-2)"
MyArray(2) = "-k(x)+(-m)*(-2)"
MyArray(3) = "-k(x)+(-m)(-2)"
MyArray(4) = "-kx+m"
MyArray(5) = "kx+m"
MyArray(6) = "k(x)+m"
For i = 0 To 6
StrCheck = MyArray(i)
Select Case Left(Trim(StrCheck), 1)
Case "+", "-"
posBrk = InStr(2, StrCheck, "(")
posStar = InStr(2, StrCheck, "*")
If posBrk > posStar Then '<~~ "-k*(-x)+(-m)*(-2)"
pos = InStr(2, StrCheck, "*")
If pos <> 0 Then
strK = Mid(StrCheck, 1, pos - 1)
Else
strK = Mid(StrCheck, 1, posBrk - 1)
End If
ElseIf posBrk < posStar Then '<~~ "-k(-x)+(-m)*(-2)"
pos = InStr(2, StrCheck, "(")
strK = Mid(StrCheck, 1, pos - 1)
Else '<~~ "-kx+m"
'~~> In such a case I am assuming that you will never use
'~~> a >=2 letter variable
strK = Mid(StrCheck, 1, 2)
End If
Case Else
posBrk = InStr(1, StrCheck, "(")
posStar = InStr(1, StrCheck, "*")
If posBrk > posStar Then '<~~ "k*(-x)+(-m)*(-2)"
pos = InStr(1, StrCheck, "*")
If pos <> 0 Then
strK = Mid(StrCheck, 1, pos - 2)
Else
strK = Mid(StrCheck, 1, posBrk - 1)
End If
ElseIf posBrk < posStar Then '<~~ "k(-x)+(-m)*(-2)"
pos = InStr(1, StrCheck, "(")
strK = Mid(StrCheck, 1, pos - 2)
Else '<~~ "kx+m"
'~~> In such a case I am assuming that you will never use
'~~> a >=2 letter variable
strK = Mid(StrCheck, 1, 1)
End If
End Select
Debug.Print "Found " & strK & " in " & MyArray(i)
Next i
End Sub
SNAPSHOT

Đó là không nhiều nhưng tôi hy vọng điều này giúp bạn trong con đường đúng đắn ...
+! cho một câu hỏi thú vị :) –