fix not finding a result in some patterns
This commit is contained in:
parent
24e2a0d441
commit
257f8e35ca
2 changed files with 5 additions and 2 deletions
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "readformat"
|
name = "readformat"
|
||||||
version = "0.1.1"
|
version = "0.1.2"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
repository = "https://github.com/tudbut/readformat"
|
repository = "https://github.com/tudbut/readformat"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
|
|
|
@ -26,7 +26,7 @@ pub fn readf(format: &str, mut s: &str) -> Option<Vec<String>> {
|
||||||
for n in 0..=occurences {
|
for n in 0..=occurences {
|
||||||
// shave off space until next {}
|
// shave off space until next {}
|
||||||
let i = if let Some(x) = f.find("{}") { x } else { f.len() };
|
let i = if let Some(x) = f.find("{}") { x } else { f.len() };
|
||||||
if f.len() <= i || s.len() <= i {
|
if f.len() < i || s.len() < i {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
if &f[0..i] != &s[0..i] {
|
if &f[0..i] != &s[0..i] {
|
||||||
|
@ -35,6 +35,7 @@ pub fn readf(format: &str, mut s: &str) -> Option<Vec<String>> {
|
||||||
if n == occurences {
|
if n == occurences {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// abcde | a{}cd{} => bcde | cd{}
|
// abcde | a{}cd{} => bcde | cd{}
|
||||||
f = &f[(i + 2)..];
|
f = &f[(i + 2)..];
|
||||||
s = &s[i..];
|
s = &s[i..];
|
||||||
|
@ -84,6 +85,7 @@ mod tests {
|
||||||
assert_eq!(readf1("Hello, {}!", "hello, person"), None);
|
assert_eq!(readf1("Hello, {}!", "hello, person"), None);
|
||||||
assert_eq!(readf1("hello!", "hello!"), Some("".into()));
|
assert_eq!(readf1("hello!", "hello!"), Some("".into()));
|
||||||
assert_eq!(readf1("Hello!", "hello!"), None);
|
assert_eq!(readf1("Hello!", "hello!"), None);
|
||||||
|
assert_eq!(readf1("{}", "person"), Some("person".into()));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -96,5 +98,6 @@ mod tests {
|
||||||
assert_eq!(readf("Hello, {} and {}!", "hello, person 1 and person 2!"), None);
|
assert_eq!(readf("Hello, {} and {}!", "hello, person 1 and person 2!"), None);
|
||||||
assert_eq!(readf("hello!", "hello!"), Some(vec![]));
|
assert_eq!(readf("hello!", "hello!"), Some(vec![]));
|
||||||
assert_eq!(readf("Hello!", "hello!"), None);
|
assert_eq!(readf("Hello!", "hello!"), None);
|
||||||
|
assert_eq!(readf("{}, {}", "person 1, person 2"), Some(vec!["person 1".into(), "person 2".into()]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue