案例变更的正则表达式

Sid*_*Sid 2 c# regex

我试图得到一个字符串,在字符串中的大小写更改的地方有一个下划线'_',以使用户更清楚.例如,如果我们有一个String'个人ID号码',我想把它变成'personal_ID_number'.这是在C#中.

谢谢,我感谢任何帮助,建议.

-sid

ste*_*ema 5

更改案例更改
你正在寻找这个(我删除了ID之前的空格,假设它是一个错字)

(?:(?<=[a-z])(?=[A-Z]))|(?:(?<=[A-Z])(?=[a-z]))
Run Code Online (Sandbox Code Playgroud)

它将转变personalIDnumberpersonal_ID_number

在Regexr上看到它

Lookbehind((?<=[a-z]))和lookahead((?=[A-Z]))构造匹配小写字母和大写字母之间的空字符串(或管道后第二部分中的其他方向|),并用下划线替换它.

使用可选空格替换大小写更改
如果要在替换中包含空格,请将其包含在外观之间

(?:(?<=[a-z])\s*(?=[A-Z]))|(?:(?<=[A-Z])\s*(?=[a-z]))
Run Code Online (Sandbox Code Playgroud)

它将转变personal IDnumberpersonal_ID_number

在Regexr上看到这里

更换案例更改,但每个单词以大写字母开头
如果您说每个单词都以大写字母开头,那么您可以这样做

(?:(?<=[a-z])(?=[A-Z]))|(?:(?<=[A-Z])(?=[A-Z][a-z]))
Run Code Online (Sandbox Code Playgroud)

这将来自

PersonalIDNumber
JustAnotherTest
OtherWordWithID
SomeMORETest

这个

Personal_ID_Number
Just_Another_Test
Other_Word_With_ID
Some_MORE_Test

在Regexr上看到这里

  • 如何判断最后一个大写是否属于最后一个单词,或者它是否是下一个大写的第一个?我认为没有办法,因为模式不知道这个词的含义.或者你说每个单词都以大写字母开头. (3认同)