regex 尝试获取字符串中的特定单词和该单词之后/之前的单词

pxy2qtax  于 2023-06-25  发布在  其他
关注(0)|答案(3)|浏览(131)

我想写一个机器人,我遇到了一个问题,我不能决定如何解决。
例如,我有一个字符串:
“今天我会买一套4214美元的包子,明天再吃。”
如何查看字符串中是否有“usd”,以及它是否是int/float?如果是,我如何得到它附近的号码?
数字的形式可能会有所不同,但一般可识别的形式应如下:

  • 1000
  • -1000
  • 1000.0
  • -1000.0
  • 1000,0
  • -1000
  • 0

任何进一步的分割都不应该被识别。
对于上面的字符串,预期的结果将是:

"4214 usd"

正则表达式在这里会很有用,但我是新来的,对它们一点也不熟悉。

bis0qfac

bis0qfac1#

Regex是一个可以接受的工具,如果你能忍受偶尔的误报和漏报(错过的美元金额或错误地标记为美元的东西)。试试这个代码。由于要匹配一个字符串中的多个格式,因此很难一次获得所有匹配项。
请参阅下面评论中的解释,regex是做什么的。
结果会给予你一个字符串数组,这样你就可以处理它了。例如,迭代它,然后删除usd并将它们转换为JS数字,这样您就可以对它们求和或其他任何东西。

const text = `Today i will buy a set of buns for 4214 usd and eat it tomorrow. So tomorrow the budget would be total of -505.5 USD.`;

// regex to match "number USD"
const regex = /[-+]?\d+[,\.]?\d?\susd/gmi;
/*

[-+]?     # optional hyphen or plus sign
\d+       # followed by multiple numbers
[,\.]?    # followed by comma or dot, also optional
\d{1,2}?  # followed by one or two numbers, optional
\s        # followed by space
/gmi      # global, multiline, case insensitive flags: match all occurences in input data, ignore case

*/

// execute
const result = text.match(regex);

console.log('matches: ', result);

// now you can do something, for turn strings to numbers for sum or whatever..
result.forEach(res => {

  // turn it into a number or something
  const num = res.replace(/\susd/i, '').replace(',', '.');
  console.log(Number(num));

});
xkrw2x1b

xkrw2x1b2#

.split

let str = "Today i will buy a set of buns for 4214 usd and eat it tomorrow.";
let arr = str.split(" ");
if(arr.includes("usd")){
  arr.forEach(function(item,index){
    if(!isNaN(item)){
      console.log((item + " " + arr[index+1]));
    }
  })
}
3pmvbmvn

3pmvbmvn3#

import re

def extract_amount(text):
    pattern = r'(\d+(?:,\d+)*(?:\.\d+)?)\s*(usd)'
    match = re.search(pattern, text, re.IGNORECASE)
    
    if match:
        amount = match.group(1)
        currency = match.group(2)
        return f"{amount} {currency}"
    
    return None

text = "Today i will buy a set of buns for 4214 usd and eat it tomorrow."
result = extract_amount(text)
if result:
    print(result)
else:
    print("No amount found.")

你可以用那个代码块

相关问题