正则表达试 求助
本帖最后由 suohu88 于 2024-5-22 14:39 编辑小白一个实在想不出来在这里求大神
例如:192761
-------ABVDDD
英文form-data
["C"]
怎么匹配到固定数值 192761 跳过 2段英文后 取 ["里面英文大写"] 请不要用 | 因为替换的时候会同步增加
还是原文出来才成 语言是 js
------WebKitFo
Content-Disposi
192761
------WebKitF
Content-Disp
["C"]
------WebKitF
Content-Dispo
5
------WebKit
Content-Disp
0
------WebKitFor
我只想匹配输出结果 是 192761 ["C"] {6}|["A-D"]{3} |用这个虽然能出来 但是替换就麻烦了 // 输入的字符串
var inputString = '192761\n-------ABVDDD\n英文form-data\n["C"]\n192761\n------WebKitF\nContent-Disp\n["d"]';
// 定义正则表达式
var pattern = /192761\n[^]*?\n\["(\w+)"\]/g;
// 用匹配结果来生成输出
var match;
while ((match = pattern.exec(inputString)) !== null) {
console.log("192761", '["' + match + '"]');
} // 输入的字符串
var inputString = '192761\n-------ABVDDD\n英文form-data\n["C"]';
var pattern = /192761(?:\n\S*){2}\n\["(\w+)"\]/;
var match = inputString.match(pattern);
if (match) {
var result = match;// 获取["里面英文大写"]
console.log(result);
} else {
console.log("未找到匹配的内容");
} 我来用python语言实现楼主的功能,系采纳!哈哈~~~
import re
s = '''
例如:192761
-------ABVDDD
英文form-data
["C"]
aasadfadsf
192761
-------ABVDDD
英文form-data
["B"]
'''
myc = '.*192761.*\n.*\n.*\n.*?\[\"(*)\"\]'
finda = re.findall(myc,s)
print(type(finda), finda)
输出的结果如下:
<class 'list'> ['C', 'B'] 本帖最后由 QQ橙子 于 2024-5-22 08:29 编辑
输入字符串:
192761SHDUHEIKJasdqzCHUJK
输出:
find value: CHUJK
输入字符串:
61SHDUHEIKJasdqzCHUJK
输出:
No find.
```
#include <regex>
#include <iostream>
#include <string>
#include <windows.h>
std::string customSearch(const std::string& text, const std::string& pattern,char b) {
size_t pos = text.find(pattern);
if (pos == std::string::npos) {
return "";
}
pos += pattern.length();
while (pos < text.length() && !std::isupper(text)) {
pos++;
}
std::string result;
while (pos < text.length()) {
result += text;
pos++;
}
size_t c_pos = result.find(b);
if (c_pos != std::string::npos) {
return result.substr(c_pos);
}
else {
return "";
}
}
使用示例:
std::string text = "192761SHDUHEIKJasdqzCHUJK";
std::string extracted_value = customSearch(text, "192761",'C');
if (!extracted_value.empty()) {
std::cout << "find value: " << extracted_value << std::endl;
}
else {
std::cout << "No find." << std::endl;
}
``` 192761.+\[\"(+)\"\]
try {
Pattern regex = Pattern.compile("192761.+\\[\\\"(+)\\\"\\]", Pattern.DOTALL);
Matcher regexMatcher = regex.matcher(subjectString);
if (regexMatcher.find()) {
// Successful match
} else {
// Match attempt failed
}
} catch (PatternSyntaxException ex) {
// Syntax error in the regular expression
}
reobj = re.compile(r"192761.+\[\"(+)\"\]", re.DOTALL)
if reobj.search(subject):
# Successful match
else:
# Match attempt failed
小年轻在奋斗 发表于 2024-5-22 09:30
192761.+\[\"(+)\"\]
try {
Pattern regex = Pattern.compile("192761.+\\ ...
请问下截图上的是什么工具,蟹蟹! 撒旦の恶 发表于 2024-5-22 10:01
请问下截图上的是什么工具,蟹蟹!
RegexBuddy
直接在论坛里面可以搜到之前大佬发的 ^192761\n([^\n]*\n){2}\["(.+?)"\] 表达式内有(),好像叫元组?可以多个提取 $s = @"
例如:192761
-------ABVDDD
英文form-data
["C"]
aasadfadsf
192761
-------ABVDDD
英文form-data
["B"]
"@
# 正则表达式,匹配192761后面的任意内容,直到找到大写字母在引号内
$pattern = '192761.*?\r?\n.*?\r?\n.*?\r?\n.*?\["(+)"\]'
# 创建Regex对象
$regex = New-Object System.Text.RegularExpressions.Regex($pattern, 'Multiline')
# 查找所有匹配项
$matches = $regex.Matches($s)
# 遍历匹配项并打印捕获组内容
foreach ($match in $matches) {
if ($match.Success) {
$capturedText = $match.Groups.Value
Write-Host "捕获到的文本是: $capturedText"
}
}