我目前正在使用以下正则表达式来分割文本:
var separators = ['!', '.', ':', ';', '?'];
var tokens = text.match(new RegExp("[^" + separators.join('') + "]+[" + separators.join('') + "]*", "g"));
我现在想要在.
之后,只要点之前的字符是大写字母就不要分开(所以:如果它one.
onE.
如果它HttpClient clientHTTP = new HttpClient();
myModel model = new myModel();
model.Id = 100;
model.data = "this is data";
var json = Newtonsoft.Json.JsonConvert.SerializeObject(model);
clientHTTP.BaseAddress = new Uri("http://REMOTE_IP/");
clientHTTP.PostAsJsonAsync("/WebcastNotify/Heat", json)
.ContinueWith((postTask) => postTask.Result.EnsureSuccessStatusCode());
不分裂,那就分开public class WebcastNotifyController : Controller
{
public ActionResult Heat(myModel model)
{
// allways recieve model.Id = 0 and model.data = null
}
}
{ {1}}。有人能给我一个提示,告诉我如何做这样的事情并将其整合到我当前的代码中吗?
答案 0 :(得分:3)
前提
您当前的RegExp模式是(忽略添加的空格):
[^!.:;?]+ [!.:;?]*
给出一个输入样本,例如:the.quick;browN.fox.jumps
你最终得到了令牌:
the.
quick;
browN.
fox.
jumps
并且您的目标是最终将标记3和4绑定在一起:browN.fox.
the.
quick;
browN.fox.
jumps
规则是如果分隔符是点(.
)并且在它之前你有一个大写字母(在这个特殊情况下是字母N
)你想让点失去它的作用作为分隔符和"绑定到文本的其余部分"。
此外,此规则仅适用于点(.
),而不适用于您列出的整个分隔符集(!.:;?
)。
的解决方案的
如果我理解的是正确的,那么你的回答是(再次忽略空白区域):
( [A-Z]\. | [^!.:;?] )+ [!.:;?]*
这里发生的事情是,除了分隔符之外,不仅仅是"任何字符"至少在左侧一次,我们只需添加一个替代词,它由任何大写字母([A-Z]
)后跟一个点(.
)组成,我必须逃脱。
看看:https://regex101.com/r/25UQbq/1
修改
这是你在javascript中使用这个RegExp模式的方法:
var input = "the.quick;browN.fox.jumps";
var pattern = "([A-Z]\.|[^!.:;?])+[!.:;?]*";
var options = "g"; // quite important
var regexp = new RegExp(pattern, options);
var output = input.match(regexp);
// output should be ["the.", "quick;", "browN.fox.", "jumps"]
答案 1 :(得分:0)
一个想法:循环遍历字符串并替换每个.
,而不是在带有不同分隔符的大写字母之后,例如!
。然后从分隔符列表中删除.
,并像之前一样进行拆分。