[英]Regular expression that works on dots
我有這個正則表達式:
string[] values = Regex
.Matches(mystring4, @"([\w-[\d]][\w\s-[\d]]+)|([0-9]+)")
.OfType<Match>()
.Select(match => match.Value.Trim())
.ToArray();
這個正則表達式變成了這個字符串:MY LIMITED COMPANY(52100000/58447000)“;
對於這些字符串:
我的有限公司-52100000-58447000
這也適用於非英文字符。
但是,當我有這個字符串時,有一個問題:MY。 有限。 公司。 ,它也將其拆分。 我不要 我不希望該正則表達式在點上起作用。 我怎樣才能做到這一點? 謝謝。
您可以在模式中的每個\\w
后面添加點,我也建議刪除不必要的(
和)
:
string[] values = Regex
.Matches("MY. LIMITED. COMPANY. (52100000 / 58447000)", @"[\w.-[\d]][\w.\s-[\d]]+|[0-9]+")
.OfType<Match>()
.Select(match => match.Value.Trim())
.ToArray();
foreach (var s in values)
Console.WriteLine(s);
參見C#演示
模式 :
[\\w.-[\\d]]
-一個Unicode字母或下划線( [\\w-[\\d]]
)或一個點( .
) [\\w.\\s-[\\d]]+
-1個或多個(由於末尾有+
量)字符,它們是Unicode字母或下划線.
或空格( \\s
) |
- 要么 [0-9]+
-一個或多個純ASCII數字 我會簡化表達。 如果前面的名字包含數字怎么辦? 並不是說我的解決方案不能完全模仿原始表達式。 名稱部分將允許使用數字。
讓我們從頭開始:
要匹配單詞,您需要的是一系列字符:
\\ w +
這將匹配任何包含下划線( _
)的字母數字字符。
考慮到您希望單詞以點結尾的可能性,可以將其添加並使其可選(一個或零個匹配項):
\\ w + \\。?
請注意轉義以使其成為實際字符,而不是字符類“任何字符”。
為了匹配后面的另一個潛在單詞,我們現在簡單地復制此匹配項,在前面添加一個空格,然后再次使用*
量詞將其設為可選:
\\ w + \\。?(?:\\ w + \\。?)*
如果您還沒有看到以?:
開頭的組是不匹配的組。 本質上,它的工作原理與通常的組類似,但是不會在結果中保存匹配的組。
就是這樣。 此模式將按預期拆分演示字符串。 當然,這可能沒有涵蓋其他可能的字符。
為了測試您的正則表達式(並學習它們),我真的建議您使用http://regex101.com之類的工具
它具有輸入掩碼,可讓您提供模式和目標字符串。 在右側,它將首先向您解釋該模式(以查看是否確實是您所想的),然后在其下方將顯示所有匹配的組。 請記住,它實際上使用了略有不同的正則表達式風格,但這對於如此簡單的模式並不重要。 (我不隸屬於該網站,只是認為它真的很有用。)
另外,要直接使用C#的regex解析器,也可以嘗試使用此Regex Tester 。 盡管不包含任何解釋,但這也以類似的方式起作用,這對於剛入門的人可能並不理想。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.