;doc:csv:matchers: clarify, mention !/& limitation (#2088)

This commit is contained in:
Simon Michael 2023-12-07 03:52:57 -10:00
parent 22ac8d056d
commit 1d29540a53

View File

@ -3303,6 +3303,8 @@ that also supports GNU word boundaries (`\b`, `\B`, `\<`, `\>`),
and nothing else. and nothing else.
If you have trouble, see "Regular expressions" in the hledger manual (<https://hledger.org/hledger.html#regular-expressions>). If you have trouble, see "Regular expressions" in the hledger manual (<https://hledger.org/hledger.html#regular-expressions>).
### What matchers match
With record matchers, it's important to know that the record matched is not the original CSV record, but a modified one: With record matchers, it's important to know that the record matched is not the original CSV record, but a modified one:
separators will be converted to commas, and enclosing double quotes (but not enclosing whitespace) are removed. separators will be converted to commas, and enclosing double quotes (but not enclosing whitespace) are removed.
So for example, when reading an SSV file, if the original record was: So for example, when reading an SSV file, if the original record was:
@ -3314,12 +3316,16 @@ the regex would see, and try to match, this modified record text:
2023-01-01,Acme, Inc., 1,000 2023-01-01,Acme, Inc., 1,000
``` ```
### Combining matchers
When an if block has multiple matchers, they are combined as follows: When an if block has multiple matchers, they are combined as follows:
- By default they are OR'd (any one of them can match) - By default they are OR'd (any one of them can match)
- When a matcher is preceded by ampersand (`&`) it will be AND'ed with the previous matcher (both of them must match). - When a matcher is preceded by ampersand (`&`) it will be AND'ed with the previous matcher (both of them must match)
- When a matcher is preceded by an exclamation mark (`!`), the matcher is negated (it may not match).
When a matcher is preceded by an exclamation mark (!), the matcher will be negated, ie it will exclude CSV records that match. [Currently](https://github.com/simonmichael/hledger/pull/2088#issuecomment-1844200398) there is a limitation:
you can't use both `&` and `!` on the same line (you can't AND a negated matcher).
### Match groups ### Match groups