Hi Eric,
As requested, some additional comments.
1. The time regular expression commented
(?x) (?# Allow comments and
ignore whitespace in regex.)
(?: (?# Non-capturing OR
opening parenthesis.)
[01][0-9] (?# Double digit from 00 to
19.)
| (?# or)
2[0-3] (?# Double digit from 20 to
23.)
) (?# Non-capturing OR
closing parenthesis.)
: (?# A colon.)
[0-5][0-9] (?# Double digit from 00 to
59.)
This expression should match any hh:mm time from 00:00 to 23:59.
2. Commented Applescript
*tell* *application* "BBEdit"
*set* vDocument *to* *first* *text document* *of* *first* *window*
*set* vTimeRegex *to* "(?:[01][0-9]|2[0-3]):[0-5][0-9]" -- Regex to match
any time from 00:00 to 23:59.
*set* vRegex *to* "^(" & vTimeRegex & ")-(" & vTimeRegex &
")\\h+([A-Z]{3})" -- Regex to captures 3 informations:
-- at beginning of a line
-- a start time to be captured
-- a colon
-- a end time to be captured
-- one or more horizontal spaces
-- 3 letters to be captured
*set* vOptions *to* {search mode:*grep*, starting at top:*true*, wrap around
:*false*, returning results:*true*} -- We want `find` to return a list of
the found matches with offsets in the document.
*set* vResult *to* *find* vRegex searching in vDocument options vOptions
*log* vResult
*if* vResult's found *then* -- The find command succeeded. vResult has a
`found matches` property that lists the matches.
*repeat* *with* vMatch *in* found matches *of* vResult -- Lets loop over
each match and extract the captured strings.
*log* vMatch
*set* vOptions *to* {search mode:*grep*, starting at top:*true*, wrap around
:*false*, returning results:*false*} -- This time, we don't want find to
return results because we want to extract the captured strings.
*set* vTag *to* *characters* (vMatch's start_offset) *thru* (vMatch's
end_offset) *of* vDocument -- Create a reference to the substring we want
to decompose by using grep substitutions.
*set* vTagMatch *to* *find* vRegex searching in vTag options vOptions --
Use `find` again against each substring (e.g. '08:30-11:30 UWA') to capture
the matching parts.
*if* vTagMatch's found *then* -- This should always succeed.
*set* vStartTime *to* *grep substitution* of "\\1" -- matched by the first
capturing parentheses: '08:30'
*set* vEndTime *to* *grep substitution* of "\\2" -- matched by the second
capturing parentheses: '11:30'
*set* vClientCode *to* *grep substitution* of "\\3" -- matched by the third
capturing parentheses: 'UWA'
*log* {vStartTime:vStartTime, vEndTime:vEndTime, vClientCode:vClientCode}
*end* *if*
*end* *repeat*
*end* *if*
*end* *tell*
Best regards
Jean Jourdain
On Friday, August 18, 2023 at 5:54:58 AM UTC+2 e2o wrote:
> phew! work my way bit-by-bit through the expression
> (?:[01][0-9]|2[0-3]):[0-5][0-9]
> and got that sorted.
>
> On Thursday, August 17, 2023 at 8:23:17 PM UTC-7 e2o wrote:
>
>> I'm also struggling with the expression:
>>
>> (?:[01][0-9]|2[0-3]):[0-5][0-9]
>>
>> On Thursday, August 17, 2023 at 8:04:20 PM UTC-7 e2o wrote:
>>
>>> JJ,
>>>
>>> I've been going over this script you sent trying to wrap my head around
>>> it. I haven't been able to get through it completely "plain-english" in my
>>> head yet. Could you briefly elaborate? I love the way the variables are set
>>> to build the find. But I'm not clear on the need for repeat statement and
>>> the overall strategy. All I know is that if I could grok this script -
>>> which does things I find myself needing a LOT - then it could open up a
>>> whole new world.
>>> Could you shed a bit of light for an old dog learning new tricks?
>>>
>>> Thanks!
>>>
>>> - eric
>>>
>>> On Monday, August 14, 2023 at 7:59:45 AM UTC-7 jj wrote:
>>>
>>>> Hi Eric,
>>>>
>>>> Here is an example of how to get the values captured by a regex.
>>>>
>>>> *tell* *application* "BBEdit"
>>>>
>>>> *set* vDocument *to* *first* *text document* *of* *first* *window*
>>>>
>>>> *set* vTimeRegex *to* "(?:[01][0-9]|2[0-3]):[0-5][0-9]"
>>>>
>>>> *set* vRegex *to* "^(" & vTimeRegex & ")-(" & vTimeRegex &
>>>> ")\\h+([A-Z]{3})"
>>>>
>>>> *set* vOptions *to* {search mode:*grep*, starting at top:*true*, wrap
>>>> around:*false*, returning results:*true*}
>>>>
>>>> *set* vResult *to* *find* vRegex searching in vDocument options
>>>> vOptions
>>>>
>>>> *if* vResult's found *then*
>>>>
>>>> *repeat* *with* vMatch *in* found matches *of* vResult
>>>>
>>>> *log* vMatch
>>>>
>>>> *set* vOptions *to* {search mode:*grep*, starting at top:*true*, wrap
>>>> around:*false*, returning results:*false*}
>>>>
>>>> *set* vTag *to* *characters* (vMatch's start_offset) *thru* (vMatch's
>>>> end_offset) *of* vDocument
>>>>
>>>> *set* vTagMatch *to* *find* vRegex searching in vTag options vOptions
>>>>
>>>> *if* vTagMatch's found *then*
>>>>
>>>> *set* vStartTime *to* *grep substitution* of "\\1"
>>>>
>>>> *set* vEndTime *to* *grep substitution* of "\\2"
>>>>
>>>> *set* vClientCode *to* *grep substitution* of "\\3"
>>>>
>>>> *log* {vStartTime:vStartTime, vEndTime:vEndTime, vClientCode:
>>>> vClientCode}
>>>>
>>>> *end* *if*
>>>>
>>>> *end* *repeat*
>>>>
>>>> *end* *if*
>>>>
>>>> *end* *tell*
>>>>
>>>> HTH,
>>>>
>>>> Jean Jourdain
>>>> On Monday, August 14, 2023 at 8:23:11 AM UTC+2 Rick Gordon wrote:
>>>>
>>>>> I haven't worked with Keyboard Maestro, but what about *found text of
>>>>> TicketTimeEntryBegin*?
>>>>>
>>>>> On August 13, 2023 at 11:20:24 PM [-0700], E2o wrote in an email
>>>>> entitled "Using AppleScript to find and set an AS variable collects
>>>>> TMI (too
>>>>> much information)":
>>>>> > found text:08:30
>>>>>
>>>>> ___________________________________________
>>>>> RICK GORDON
>>>>> EMERALD VALLEY GRAPHICS AND CONSULTING
>>>>> ___________________________________________
>>>>> WWW: http://www.shelterpub.com
>>>>>
>>>>
--
This is the BBEdit Talk public discussion group. If you have a feature request
or need technical support, please email "[email protected]" rather than
posting here. Follow @bbedit on Twitter: <https://twitter.com/bbedit>
---
You received this message because you are subscribed to the Google Groups
"BBEdit Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/bbedit/79197fb6-389b-4b1d-9432-ecacf9513465n%40googlegroups.com.