我試圖讓一個字符串在字符串的每一處都有一個下劃線'_',以便使用戶更清楚。例如,如果我們有一個字符串'個人ID號',我想把它設置爲'personal_ID_number'。這是用C#編寫的。正則表達式換個案
謝謝,我感謝任何幫助,建議。
-sid
我試圖讓一個字符串在字符串的每一處都有一個下劃線'_',以便使用戶更清楚。例如,如果我們有一個字符串'個人ID號',我想把它設置爲'personal_ID_number'。這是用C#編寫的。正則表達式換個案
謝謝,我感謝任何幫助,建議。
-sid
上的情況下改變
您正在尋找這個替換(我刪除ID之前的空間,假設它一個錯字)
(?:(?<=[a-z])(?=[A-Z]))|(?:(?<=[A-Z])(?=[a-z]))
它會轉變爲personalIDnumber
personal_ID_number
查看一下here on Regexr
Lookbehind((?<=[a-z])
)和lookahead((?=[A-Z])
)構造匹配小寫字母和大寫字母之間的空字符串(或者在管道|
後面的第二部分中),並將其替換爲下劃線。
具有可選的空白
的情況下改變替換如果你想在空格替換,只是包括lookarounds
(?:(?<=[a-z])\s*(?=[A-Z]))|(?:(?<=[A-Z])\s*(?=[a-z]))
之間也將轉變personal IDnumber
到personal_ID_number
更換O吶情況的變化,但每個單詞以大寫開頭
如果你說的每一個字以大寫字母開頭,那麼你就可以做到這一點
(?:(?<=[a-z])(?=[A-Z]))|(?:(?<=[A-Z])(?=[A-Z][a-z]))
這將使從
PersonalIDNumber
JustAnotherTest
OtherWordWithID
SomeMORETest
這
Personal_ID_Number
Just_Another_Test
Other_Word_With_ID
Some_MORE_Test
看到這個here on Regexr
非正則表達式的解決方案(以防萬一)
string str = "personalIDnumber";
var result =
Enumerable.Range(0, str.Length - 1)
.Where(i => char.IsUpper(str[i]) != char.IsUpper(str[i + 1]))
.ToList();
string resultString = result.Aggregate(str, (current, i) => current.Insert(i + 1 + result.IndexOf(i), "_"));
的result
存儲的其中一個_
具有位置的列表被插入和所述Aggregate()
函數插入它。
我得到它的工作,我用 「([AZ] [AZ,0-9] +?!| [AZ] +([AZ]))(X?)」 與_ $ 1,和我同在_輸出如果字符串以大寫字母開頭,我將刪除第一個下劃線表單字符串。感謝大家。 – Sid
在你的情況,你也替換爲下劃線空格。這也是你在找什麼?另外,你有什麼嘗試? – npinti
白色空間不是問題,我只是試圖讓每一個案件的改變下劃線,我試圖在每一個大寫字母分割,沒有工作,現在我想檢查每一個字符爲它的情況和它的比較與之前和之後的每個角色的情況。的感謝 – Sid
可能重複[.NET - ?你怎麼能拆分分隔的字符串到一個數組一個「帽」(http://stackoverflow.com/questions/155303/net-how-can-you-split-a-caps -derand-string-into-an-an-array) – GSerg