我正在尝试编写一些正则表达式模式,以从文本块中取出位置,功能部件和接受付款的部分。我正在建立一个显示食物选择的网站,并且在API中,它们的描述部分包含了足够的信息,这就是为什么我要提取特定文本的原因。
我在正则表达式中进行了正面和负面的展望,但仍然无法解决问题。我可以选择第二部分之前的所有内容,但前提是在这种情况下我要选择位置。如果要选择功能,则还要选择上一部分位置。参见以下文字作为示例。
这是我要从中提取的文本:
位置:村庄1 \ r \ n \ r \ n功能:众多 产品,包括主菜,热餐,燃木比萨饼,沙拉吧, 烧烤物品,定制熟食三明治和包裹,方便 物品及更多\ r \ n \ r \ n已接受付款:现金,Watcard \ r \ n \ r \ n这是结识朋友的好地方!的香气 我们内部的UW Bakery提供的新鲜烤制面包和糕点将 肯定会让您深吸一口气。 Mudie提供了很多 选择素食,抢购食物,沙拉吧, 烧烤用品,熟食三明治和pitas,全套早餐, 和方便食品。提供热食和小菜 每个午餐和晚餐时间。\ r \ n \ r \ n妈妈的用餐时间 柜台*:\ r \ n \ r \ n早餐:7:30-11:00 am \ r \ n \ r \ n午餐:11:30 am -2:00 pm \ r \ n \ r \ n晚餐:4:30-8:00 pm \ r \ n \ r \ n *请注意,这些时间如有更改,恕不另行通知。“
到目前为止,我已经写过:
/.+?(?=Payment accepted)/
选择直到“付款已接受”部分的所有内容。我也写了
/(Location|Features|Payment accepted):\s{1,4}?[A-Z]+\s?\d?/
在其中选择我想要的三个地方的部分。我无法将两者联系起来,也无法在没有其他部分的情况下提出能够选择所需内容的任何内容。 任何帮助将不胜感激。
因此在上述情况下,我提取的部分将是:
Location: Village 1
Features: A multitude of offerings, including entrees, hot meals, wood-fired pizza, salad bar, grill items, made-to-order deli sandwiches & wraps, convenience items and much more
Payment accepted: cash, Watcard
答案 0 :(得分:2)
您可以使用此正则表达式提取文本的这三个部分,
/Location:\s*([^\v]*)\s*Features:\s*([^\v]*)Payment accepted:(.*?)(?=\r\n)/
这是相同的JS代码。
var myString = "Location: Village 1 \r\n\r\nFeatures: A multitude of offerings, including entrees, hot meals, wood-fired pizza, salad bar, grill items, made-to-order deli sandwiches & wraps, convenience items and much more\r\n\r\nPayment accepted: cash, Watcard \r\n\r\nThis is a great place to meet your friends! The aroma of fresh baked breads and pastries from our in-house UW Bakery will surely make you take a deep breath. Mudie’s offers a large selection of vegetarian foods, grab n’ go items, salad bar, grill items, made-to-order deli sandwiches and pitas, full breakfast, and convenience foods. A hot entrée item and side dishes are available every lunch and dinner hour.\r\n\r\nMeal hours for Mom's Counter*:\r\n\r\nBreakfast: 7:30 - 11:00 am\r\n\r\nLunch:11:30 am - 2:00 pm\r\n\r\nDinner: 4:30 - 8:00 pm \r\n\r\n*please note, these hours are subject to change without notice "; // I want "abc"
var arr = /Location:\s*([^\v]*)\s*Features:\s*([^\v]*)Payment accepted:([^\r\n]*)/.exec(myString);
console.log("Location --> "+arr[1]);
console.log("Features --> "+arr[2]);
console.log("Payment accepted --> "+arr[3]);
答案 1 :(得分:0)
如果我正确理解了这一点,并且您确定各节的重复顺序相同,那么您可以将各行的正则表达式放在一起。
Is something like this what you were looking for?
Location:\s?([\w\d ]+)\s{1,5}Features:\s+(.+)\s{1,5}Payment accepted:\s?(.+)