Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
x1 = ".,:-!?text. Txt"
x2 = ".,:-!?Text: txt"
Chciałbym usunąć z powyższego tekstu znaki "[?!;:,\.-]", które nie są literami
i nie są cyframi [^a-ząćęłńóśźż0-9A-ZĄĆĘŁŃÓŚŹŻ]" z lewej strony przed wyrazem "text"
Jak powinien wyglądać kod?
myRegExp.Pattern = "???????"
Offline
taki sed załatwia sprawę, przynajmniej dla twoich przykładów:
sed 's/^\([^"]*"\)[?!;:,\.-]*\(Text.*\)$/\1\2/gI'
Ostatnio edytowany przez seler (2017-12-27 14:02:09)
Offline
W pythonie może to wyglądać tak:
import re pat = re.compile('([^\w\d]*)') x1 = r'.,:-!?text. Txt' s = re.sub(pat, '', x1,count=1)
python regex - ([^\w\d]*)(.*)
pcre - ([^[:alnum:]]*)(.*)
Offline
To używam do VBS script
a to sprawdzam pattern: http://regexstorm.net/tester
ten pasuje
([^\w\d]*) , wielkie dzięki
na testerze zaznacza również wszystko pomiędzy wyrazami
a w VBS jest OK.
Ostatnio edytowany przez sexy69 (2017-12-27 16:06:57)
Offline
jest problem:
z wyrazu !żółć
usunięte zostaje wszystko,
Ostatnio edytowany przez sexy69 (2017-12-27 17:35:13)
Offline
To kewstia obsługi unicode. Jak to jest w VBS to nie wiem. W pythonie to się załatiwa tak:
In [11]: import re ...: pat = re.compile('([^\w\d]*)', re.UNICODE) ...: x1 = r'.,:-!?text. Txt' ...: s = re.sub(pat, '', x1,count=1) ...: In [12]: x2 = '!żółć' In [13]: s = re.sub(pat, '', x2, count=1) In [14]: In [14]: s Out[14]: 'żółć'
Offline
Nic z tego nie da się. zaadoptować.
W skrypcie VBS też mam to rozwiązane:
Biorę do pętli całe zdanie i sprawdzam po kolei od lewej czy są znaki do usunięcia.
Jeśli tak to usuwam i sprawdzam następny znak aż natrafię na literę albo liczbę to wchodzę z pętli.
RegExp załatwiłby to dwiema liniami tekstu.
myRegExp.Pattern = "??????????"
Text(nr) = myRegExp.Replace(Text(nr), "")
krócej i szybciej.
Sądziłem, że w RegExp można każdy kod dopasować do sytuacji ale,
zaczynam wątpić w jego uniwersalność.
Ostatnio edytowany przez sexy69 (2017-12-27 20:54:01)
Offline
taki powinien być efekt:
.,:-!?żółć. Txt -> żółć. Txt
.,:-!?Żółć: txt -> Żółć: txt
to nie działa: "([!?=:;.]*).*
Text(nr) = ".,:-!?żółć. Txt"
myRegExp.Pattern = "([!?=:;.]*).*"
Set poszukiwane = myRegExp.Execute(Text(nr))
wynik = poszukiwane.Item(0)
'powinno być: żółć. Txt
a jest wszystko (nic nie usunięte.)
Ostatnio edytowany przez sexy69 (2017-12-28 09:20:50)
Offline
wykryłem to:
http://regexstorm.net/tester?p=%28%5b%5b%5cw%5d.*%5 … 2%c4%87%3a+24
teraz tylko odwrócić całe zaznaczenie i będzie OK.
Offline