REGEX איך לחפש מילה שלימה / תחילת מילה
-
@Y-Excel-Access
זה?
https://regex101.com/r/f31L7J/1
או שבכוונה שמת את השגיאה שהפסיק לא במקום. ואז אפשר לעשות שיחפש את הרווח או את הפסיק אבל השאלה לכמה אפשרויות אתה רוצה להתרחב. (עכ"פ זה לא כלול בשאלה המקורית של תחילת מילה, כי אם יש את הפסיק אז זה לא התחלה) -
-
-
@chagold כן, הבנתי את הרעיון, פשוט - אין כזה דבר - צור אותו.
כמובן הקפת רק את הסוגריים והפסיק ולא את כל האפשרויות, אבל זה הכיוון שאתה מציע:פשוט לחפש את כל התווים שיכולים להיות סוף והתחלת מילה, ולשים אותם מסביב לטקסט.
טוב, זה יהיה עבודה (ובאגים), ועדיף ממשהו מוכן, אבל לא מצאנו. -
@chagold ניסיתי, ואולי הצלחתי.
זה אמור להיות טוב? לכאורה זה עובד לי...((^|[^a-zA-Z0-9_א-ת])אניי($|[^a-zA-Z0-9_א-ת]))
ו מצאתי בעיה אחרת... שההחלפה בקוד VBA שהבאתי מחליפה לי גם את התווים הסובבים, ולא רק את המילה.
כלומר מהטקסט "אניי, רוצה ללמוד באנייה שלי"
יוצא לי "אני רוצה ללמוד באנייה שלי" - בנוסף למילה, הפסיק הסמוך לה נמחק
ומהטקסט "אניי ,רוצה ללמוד באנייה שלי" יוצא לי "אני,רוצה ללמוד באנייה שלי" - בנוסף למילה ששונתה, הרווח הסמוך לאות נמחק.
והבעיה שאני צריך שימצא את המילה על ידי בדיקת התו הקודם לה והמאוחר ממנה ב REGEX, אבל שלא יחליף באמת כי אם את המילה עצמה... -
אשמח שוב את עזרתכם (בפרט @yossiz )
שאלתי מתכנת שאני מכיר,
הוא הביא לי את הקוד הזה:"((?<=[^a-zA-Z0-9_])|^)" & MyStr & "((?=[^a-zA-Z0-9_])|$)"
זה מחפש את הטקסט אבל לא בוחר אותו.
לדאבוני זה לא עובד ב VBA...
אז הביא לי את זה:"(?:[^a-zA-Z0-9_]|^)("& MyStr &")(?:[^a-zA-Z0-9_]|$)"
שזה בוחר את הטקסט בשלוש קטעים שונים, כך שיהיה אפשר אח"כ להתייחס אל כל קטע.
הבעיה שאני לא יודע איך לבחור שוב את הקטע בלי להחליף אותו.מצאתי מעין זה לגבי חיפוש והחלפה רגילים של וורד, (לא הצלחתי ליישם בפועל כאן):
@yossiz כתב בעזרה בחיפוש והחלפה בוורד:
@אוריי תשתמש בתווים כלליים ככה:
החיפוש:
(^13[א-ת]@)\\].
החלפה:
\1.
הסבר:
חיפוש:
(...)
מכיל קבוצה שניתן לציין אח״כ בהחלפה^13
סימן סוף פיסקה (בחיפוש עם תווים כלליים)[א-ת]
כל תו בטווח א-ת@
1 או יותר מהנ״ל\].
מייצגים את עצמם, צריך מילוט (\
) לפני ה-\]
אחרת יש לתו זה משמעות מיוחדת
החלפה:
\1
התוכן של הקבוצה הראשונה בחיפוש(...)
.
נקודה
תודה רבה!
-
הצלחתי!
ככה:"([^a-zA-Z0-9_]|^)" & myStr & "([^a-zA-Z0-9_]|$)"
ובהחלפה להתייחס לקבוצה שלפני כ $1 והקבוצה שאחרי כ $2.
זה הקוד לדוגמה:
(סליחה מראש על הערבוב בין העברית לאנגלית בקוד, אבל אני פחות מקפיד כשאני מתאמן עם קוד שלי בלי ליצור משהו...)Public Sub Regex_החלפה_לפי_מילה_שלימה(ByRef טקסט As String, ByVal מילה_לחיפוש As String, ByVal מילה_מחליפה As String) Regex_HideSpecialCharacter מילה_לחיפוש Dim regExp As Object Set regExp = CreateObject("vbscript.regexp") With regExp .Pattern = "([^a-zA-Z0-9_]|^)" & מילה_לחיפוש & "([^a-zA-Z0-9_]|$)" .Global = True טקסט = .Replace(טקסט, "$1" & מילה_מחליפה & "$2") End With End Sub
-
על הטקסט לחיפוש, אם אני רוצה שלא יהיה לפי תווים מיוחדים, אני עושה לפני כן:
Public Sub Regex_HideSpecialCharacter(ByRef str As String) Dim specialCharacters As Variant, i As Integer specialCharacters = Array("[", "\", "$", "&", "+", ",", ":", ";", "=", "?", "@", "#", "|", "'", "<", ">", ".", "^", "*", "(", ")", "%", "!", "-", "]") For i = 0 To 24 ' == Len("[\$&+,:;=?@#|'<>.^*()%!-]") - 1 str = Replace(str, specialCharacters(i), "\" & specialCharacters(i)) Next i End Sub
-
@Y-Excel-Access יפה, הצעות לשיפור שלי
א.
במקום
[^a-zA-Z0-9_]
ניתן לכתוב
\W
ובמקום
[^a-zA-Z0-9_א-ת]
אפשר
[^\wא-ת]ב. בשביל הRegex_HideSpecialCharacter, ראשית כל יותר נכון להשתמש בפונקציה, ושנית אפשר גם פה להשתמש בRegExp:
Public Function Regex_HideSpecialCharacter(ByVal str As String) As String Dim regExp As Object Set regExp = CreateObject("vbscript.regexp") With regExp .Pattern = "([\[\\\$&\+,:;=\?@#\|'<>\.\^\*\(\)%!-\]])" .Global = True Regex_HideSpecialCharacter = .Replace(str, "\$1") End With End Function