# Action Rules and Types for case conversion

**URL:** https://community.mp3tag.de/t/action-rules-and-types-for-case-conversion/71815
**Category:** Support
**Created:** [September 7, 2026, 12:18am UTC](https://community.mp3tag.de/t/action-rules-and-types-for-case-conversion/71815 "2026-09-07T00:18:20Z")
**Posts on this page:** 9
**Page:** 1

<div class="post-metadata">

### Author: ![PontiacBlues](https://community.mp3tag.de/letter_avatar_proxy/v4/letter/p/c57346/32.png) [@PontiacBlues](https://community.mp3tag.de/u/PontiacBlues)
#### Post date: [September 7, 2026, 12:18am UTC](https://community.mp3tag.de/t/action-rules-and-types-for-case-conversion/71815/1 "2026-09-07T00:18:20Z")

</div>

I am using version 3.36.1

I have an Action Type that correctly addresses word contractions. However, I was unsuccessful trying to create an action type to capitalize the first letter of words that follow an apostrophe that have nothing before the apostrophe ('Bout, 'Cause, 'Round, etc.) without affecting already contracted words. Most attempts turned words like can't into Can'T.

I was also unsuccessful creating an Action Type to capitalize the first letter of each word in a multi-hyphenated term. I want to turn things like tee-nah-nah-nah or diddle-da-diddle into Tee-Nah-Nah-Nah and Diddle-Da-Diddle. But no luck. It only capitalizes the first section: Tee-nah-nah-nah and Diddle-da-diddle.

Any help would be appreciated!

---

<div class="post-metadata">

### Author: ![ohrenkino](https://community.mp3tag.de/user_avatar/community.mp3tag.de/ohrenkino/32/4843_2.png) [@ohrenkino](https://community.mp3tag.de/u/ohrenkino)
#### Post date: [September 7, 2026, 6:20am UTC](https://community.mp3tag.de/t/action-rules-and-types-for-case-conversion/71815/2 "2026-09-07T06:20:26Z")

</div>

> [@PontiacBlues](#):
>
> apostrophe ('Bout, 'Cause, 'Round, etc.)

Try Format value with  
Format string: `$regexp(%title%,\s+''(\l), ''\u$1)`

> [@PontiacBlues](#):
>
> I want to turn things like tee-nah-nah-nah or diddle-da-diddle into Tee-Nah-Nah-Nah and Diddle-Da-Diddle

Add the hyphen as "Words begin from /after any of" in the action of the type "Case conversion" for Mixed case.

---

<div class="post-metadata">

### Author: ![LyricsLover](https://community.mp3tag.de/letter_avatar_proxy/v4/letter/l/c6cbf5/32.png) [@LyricsLover](https://community.mp3tag.de/u/LyricsLover)
#### Post date: [September 7, 2026, 6:25am UTC](https://community.mp3tag.de/t/action-rules-and-types-for-case-conversion/71815/3 "2026-09-07T06:25:50Z")

</div>

> [@ohrenkino](#):
>
> Try Format value with  
> Format string: `$regexp(%title%,\s+''(\l), ''\u$1)`

This works fine if the word has a whitespace `\s` before the apostrophe.  
However, the OP is asking for "that have nothing before the apostrophe".  
Perhaps I have misunderstood this request, but wouldn't "nothing" be different from "whitespace"?

---

<div class="post-metadata">

### Author: ![ohrenkino](https://community.mp3tag.de/user_avatar/community.mp3tag.de/ohrenkino/32/4843_2.png) [@ohrenkino](https://community.mp3tag.de/u/ohrenkino)
#### Post date: [September 7, 2026, 6:29am UTC](https://community.mp3tag.de/t/action-rules-and-types-for-case-conversion/71815/4 "2026-09-07T06:29:16Z")

</div>

The suggested expression works for all apostrophes as word starters as long as this word isn't also the start of the field.  
I would say: try it, then refine it if at all.

---

<div class="post-metadata">

### Author: ![Casual\_Tea](https://community.mp3tag.de/user_avatar/community.mp3tag.de/casual_tea/32/18886_2.png) [@Casual\_Tea](https://community.mp3tag.de/u/Casual_Tea)
#### Post date: [September 7, 2026, 1:23pm UTC](https://community.mp3tag.de/t/action-rules-and-types-for-case-conversion/71815/5 "2026-09-07T13:23:58Z")

</div>

In such cases I find positive/negative lookahead/lookbehind to be the most useful approach.

### Contractions

Action type:  
`Replace with regular expression`  
Field:  
`TITLE`  
Regular expression:

```auto
(?<![Ia-z]')(?<=')([a-z])

```

Replace matches with:  
`\u$1`

 ![contractions](https://community.mp3tag.de/uploads/default/original/3X/4/3/436cf922d19336d21b24daaacab72cb89caa2ead.png)

If you also want to capitalize other letters (for example `äöü`), you might want to add them to the second character class like this: `[a-zäöü]`.

### Multi-hyphenated:

Action type:  
`Replace with regular expression`  
Field:  
`TITLE`  
Regular expression:

```auto
(?<=[a-z]-)([a-z])|(?<![a-z])([a-z])(?=[a-z]+-)

```

Replace matches with:  
`\u$1\u$2`

 ![multi-hyphenated](https://community.mp3tag.de/uploads/default/original/3X/d/a/da6a676518b007eb0f8201da88fbe9467b32e2a7.png)

### Tests

Do note that I only performed limited testing for both, your data might contain other cases that are not covered.

Tests for contractions:

 ![contraction test](https://community.mp3tag.de/uploads/default/original/3X/d/f/dfdfa563fea827748da2911cce2d4aae2d218f48.png)

Tests for multi-hyphenated:

 ![multi-hyphen test](https://community.mp3tag.de/uploads/default/original/3X/0/8/08bd65decdc0bcb4ad691b4101ed1405f85fde04.png)

---

<div class="post-metadata">

### Author: ![juvalu](https://community.mp3tag.de/letter_avatar_proxy/v4/letter/j/35a633/32.png) [@juvalu](https://community.mp3tag.de/u/juvalu)
#### Post date: [September 9, 2026, 7:50am UTC](https://community.mp3tag.de/t/action-rules-and-types-for-case-conversion/71815/6 "2026-09-09T07:50:59Z")

</div>

> [@LyricsLover](#):
>
> > [@ohrenkino](#):
> >
> > Try Format value with  
> > Format string: `$regexp(%title%,\s+''(\l), ''\u$1)`
> 
> This works fine if the word has a whitespace `\s` before the apostrophe.  
> However, the OP is asking for "that have nothing before the apostrophe".  
> Perhaps I have misunderstood this request, but wouldn't "nothing" be different from "whitespace"?

If it might be useful to the discussion, modification the solution to the regex proposed by @ohrenkino to capitalize the first letters of words following an apostrophe—specifically those with nothing preceding the apostrophe.

With space  
Format value  
`$regexp(%title%,''(\l), ''\u$1)`

> Example: Music'bout,'cause,'round  
> Result: Music 'Bout, 'Cause, 'Round

Without space  
Format value  
`$regexp(%title%,''(\l),''\u$1)`

> Example: Music'bout,'cause,'round  
> Result: Music'Bout,'Cause,'Round

---

<div class="post-metadata">

### Author: ![ohrenkino](https://community.mp3tag.de/user_avatar/community.mp3tag.de/ohrenkino/32/4843_2.png) [@ohrenkino](https://community.mp3tag.de/u/ohrenkino)
#### Post date: [September 9, 2026, 8:03am UTC](https://community.mp3tag.de/t/action-rules-and-types-for-case-conversion/71815/7 "2026-09-09T08:03:41Z")

</div>

The problem with the apostrophe in the middle is that this would also transform "isn't" into "isn'T" (etc.) - this could also be achieved with the case conversion action and the apostrophe added as word separating character.

---

<div class="post-metadata">

### Author: ![Casual\_Tea](https://community.mp3tag.de/user_avatar/community.mp3tag.de/casual_tea/32/18886_2.png) [@Casual\_Tea](https://community.mp3tag.de/u/Casual_Tea)
#### Post date: [September 9, 2026, 5:20pm UTC](https://community.mp3tag.de/t/action-rules-and-types-for-case-conversion/71815/8 "2026-09-09T17:20:42Z")

</div>

If you want to match those cases but not standard contractions, you can get more specific.

I've used this list of [standard contractions](https://editorsmanual.com/articles/contractions-list/) as the test data.  
By only adding characters to the character class in the negative lookbehind that exist in standard contractions right before the `'`, they are left untouched.

 ![image](https://community.mp3tag.de/uploads/default/original/3X/0/7/07fec907d777939b7c36863df9950c60cade560a.png)

Regular expression:

```auto
(?<![adeghInotuwy]')(?<=')([a-z])

```

Replace with:  
`\u$1`

> **Test string**
>
> ```auto
> Music'bout,'cause,'round
> 
> don't didn't isn't wasn't aren't weren't hasn't haven't hadn't can't couldn't
> shan't shouldn't won't wouldn't mightn't mustn't oughtn't needn't could've
> should've would've might've must've I'm you're she's he's it's we're they're I've
> you've we've they've I'll you'll he'll she'll it'll we'll they'll I'd you'd she'd
> he'd it'd we'd they'd that's that've that'd which've who's who're who've who'd
> who'll what's what're what'll where's where'd when's why's why'd how's here's
> there's there'll there'd someone's somebody's no one's nobody's something's
> nothing's let's ma'am o'clock
> 
> ```

And when you want to insert a space before the single quote:

 ![add space before single quote](https://community.mp3tag.de/uploads/default/original/3X/5/6/56152b1ca0c44973e8a13047e229de83ef2e88f2.png)

Regular expression:

```auto
(?<![adeghInotuwy])'([a-z])

```

Replace with:  
` '\u$1`

---

<div class="post-metadata">

### Author: ![system](https://community.mp3tag.de/uploads/default/original/2X/c/ce7035d426cb755a7916793326d23b465222a407.png) [@system](https://community.mp3tag.de/u/system)
#### Post date: [September 14, 2026, 6:30am UTC](https://community.mp3tag.de/t/action-rules-and-types-for-case-conversion/71815/9 "2026-09-14T06:30:00Z")

</div>

This topic was automatically closed 2 days after the last reply. New replies are no longer allowed.
