這個是我做的使用正則表達式來切割字符串的一個案例部分代碼:
功能簡介:一條物流信息字符串中截取出多種數據詳情
需要切割出的數據包括:
起始地,目的地,貨物數量,貨物單位,貨物類型,車數量,車長度,車類型,價格,價格單位
需要切割字符串類型舉例(多種,包括有車求貨,有貨求車等):
1、湖南衡陽->湖南湘潭、湖南長沙,有6米半封閉車,求1-8噸貨
2、湖南長沙->河南南陽,有9.6米平板車,求貨
3、湖南長沙->青海、陝西西安、陝西漢中、陝西安康,有2台6.8米高欄車,求12-25噸貨
4、湖南湘潭->湖南岳陽臨湘,有27-120噸重貨,求1-3台9.6-17.5米車,今天定車 明天裝貨
5、湖南岳陽臨湘->山東菏澤,有15-28噸棉花,求9.6-17米車,230元/噸,馬上可以裝貨
6、湖南長沙->湖南益陽安化縣,有1噸貨物,求2-3米車,急運
7、湖南湘潭->江西贛州,有35-40噸貨物,求半掛車,急運
...
當然,這些僅僅只是舉例
下面是方法詳細代碼:
using System.Text;
using System.Text.Regularexpressions;
#region 使用正則表達式切割字符串
/// <summary>
/// 切割字符串分別賦值給KC_INFO實例的屬性:
/// KCI_START_ADDRESS,KCI_END_ADDRESS,KCP_GOODS_ID,KCI_GOODS_NUMBER,KCI_GOODS_UNIT,KCP_CAR_ID,KCI_CAR_NUMBER,KCI_CAR_LENGTH,KCI_PRICE,KCI_PRICE_UNIT
/// </summary>
/// <param name="ki"></param>
public void splitMainInfoString(KC_INFO ki)
{
string reg_start_address = string.Format(@"^[^->]*(?=->)");
string reg_end_address = string.Format(@"(?<=->)[^,]*(?=,)");
string reg_goods_number = string.Empty;
string reg_goods_unit = string.Empty;
string reg_goods_id = string.Empty;
string reg_car_id = string.Empty;
string reg_car_number = string.Empty;
string reg_car_length = string.Empty;
string reg_price = string.Empty;
string reg_price_unit = string.Empty;
//用,號分割字符串
MatchCollection ms = Regex.Matches(InfoText, @"[^,]*[^s](?=,|$)");
string goodsInfoString = string.Empty;
string carInfoString = string.Empty;
if((new int[]{2,22,5}.Contains(this.Type))) //有貨求車
{
//貨物信息字符串
goodsInfoString = ms[1].ToString();
//車輛信息字符串
carInfoString = ms[2].ToString();
//匹配貨物數量的Regularexpression
reg_goods_number = string.Format(@"(?<=有)((d+.d+)|(d+-d+)|d+)(?=(噸|方|件|車|公斤|個|台))");
//匹配貨物單位
reg_goods_unit = string.Format(@"(?<=有((d+.?d+)|(d+-d+)|d+))(噸|方|件|車|公斤|個|台)");
//匹配貨物單位
reg_goods_id = string.Format(@"(?<=有((d+.d)|(d+-d+)(d+))(噸|方|件|車|公斤|個|台))w+");
//匹配需要車的數量
reg_car_number = string.Format(@"(?<=求)((d+-d+)|(d+))(?=台)|(?<=求)大量");
//匹配車的長度
reg_car_length = @"(?<=求*[^d])((d+.d+)|(d+-d+)|(d+.?d{0,}-d+.?d{0,})|(d+))(?=米)";
//匹配車的類型
reg_car_id = string.Format(@"(冷藏|後八輪或前四後八|零擔|s無箱板車|本地車|駁船|60公分欄半掛)(?=車)");
}
else //有車求貨
{
goodsInfoString = ms[2].ToString();
carInfoString = ms[1].ToString();
//匹配需要貨物數量
reg_goods_number = @"(?<=求)(((d+.?d{0,})-(d+.?d{0,}))|(d+.d+)|(d+)|大量)";
//貨物單位統一為噸
reg_goods_unit = string.Format("噸");
//不限貨物類型
reg_goods_id = string.Empty;
//匹配車的數量
reg_car_number = string.Format(@"(?<=有)(d+-d+|d+|大量)(?=台)");
//匹配車的長度